Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Скрипт уменьшения скорости подключения для Mikrotik Router OS

 27 Дек 2011    MikroTik, Scripts

Мы уже рассматривали ранее пример скрипта уменьшения скорости для Mikrotik Router OS. Но тогда мы разбирали такой вариант, в котором все названия шейпера различаются только цифрами в конце имени.

 

Рис.1. Mikrotik Router OS, список правил шейпера с похожими названиями.

 

В этом случае при помощи цикла for мы можем создать все имена шейпера, добавляя к слову queue цифры.

 

Рис.2. Mikrotik Router OS, список правил шейпера с разными названиями.

 

А что делать, когда у правил шейпера абсолютно разные названия и они не имеют ничего общего друг с другом? В этом случае мы сможем пройтись по правилам шейпера в цикле for, используя порядковый номер правила.

Приступим к написанию скрипта.

Скрипт выглядит следующим образом:

:local alltraf;

:local totaltraf;

:local namerule;

:local upload;

:local download;

:local allrules ([/queue simple print count-only] -1);

:for y from=0 to=$allrules do={:set alltraf [/que s get number=$y byte]; :set namerule [/que s get number=$y name]; :set upload [:pick $alltraf 0 ([:find $alltraf "/"]-1)]; :set download [:pick $alltraf ([:find $alltraf "/"]+1) [:len $alltraf]]; :set totaltraf (($upload + $download) / 1048576); :put $totaltraf; :if ($totaltraf >= 5000 ) do={ /queue simple set [find name="$namerule"] max-limit="5M/5M"}}

 

Разбираем скрипт.

Объявляем переменные, которые понадобяться для работы скрипта:

:local namerule; - название шейпера, с которым взаимодействует скрипт в данный момент;

:local alltraf; - извлеченные данные о трафике в правиле;

:local upload; - исходящий трафик;

:local download; - входящий трафик;

:local totaltraf; - общий трафик.

При помощи print count-only подсчитываем количество правил шейпера. Потом отнимаем единицу (поскольку отсчёт начинается с нуля) и заносим в переменную allrules:

:local allrules ([/queue simple print count-only] -1);

Выполняем цикл for, который будет перебирать правила от нуля до значения указанного в переменной $allrules.

:for y from=0 to=$allrules do={}

Заносим информацию об общем трафике в переменную alltraf:

:set alltraf [/que s get number=$y byte];

 

Рис.3. Извлечённые данные о трафике.

 

Заносим в переменную namerule имя правила, с которым в данный момент работает скрипт:

:set namerule [/que s get number=$y name];

С помощью функции pick извлекаем исходящий и входящий трафик и заносим эти данные в переменные upload и download:

:set upload [:pick $alltraf 0 ([:find $alltraf "/"]-1)]; :set download [:pick $alltraf ([:find $alltraf "/"]+1) [:len $alltraf]];

Складываем данные о входящем и исходящем трафике и переводим их в мегабайты:

:set totaltraf (($upload + $download) / 1048576)

Выполняем проверку: если общий трафик в данном правиле превышает 5000, то уменьшаем значение скорости до 5 Мбит/c.

:if ($totaltraf >= 5000 ) do={ /queue simple set [find name="$namerule"] max-limit="5M/5M"}}

 

Евгений Рудченко специально для ASP24.