Знаю что тема стара, но я просто оставлю это здесь, вдруг кому пригодится для тех же целей или как пример:
Шейпер настраиваем так как писалось выше.
Быченков Виталий Анатолье писал(а):to Puzan_aga
В меню Динамического Шейпирования в созданном тобой шейпере есть 3 вкладки "Входящий канал" "Исходящий канал" "RADIUS атрибуты" В "RADIUS атрибуты" жмакаш на кнопку добавить он предлагает добавить атрибуты там есть поле где написано что то типа "Входящая полоса" а рядом кнопка "Добавить" при нажатии на нее у тебя в нижнем поле появится название переменной. Т.е. радиус параметром или ее частью будет какая то переменная относящаяся к DynaShape (Ширина канала например), ну а дальше формируеш радиус атрибут строку или число...
Только два момента: в тарифе и в пользователе не должно быть переопределено таких же RADIUS атрибут. И если у тебя микротик то нужно поиграться какую переменную взять устанавливающую значение в килобайтах или в килобитах. Я уже точно не помню но при одном из значений на микротике скорость выставляется не корректно.
Но основная проблема заключается в том, что:
1. Если вы используете для передачи команд на микротик API - команду о разрыве сессии он не передает.
2. Динамическое правило изменить невозможно, значит выход один - рвать сессию, чтоб пользователь переподключился с новыми параметрами.
Для принудительного разрыва сессии написал скрипт:
Код: Выделить всё
:foreach i in=[/queue simple find max-limit="Rx/Tx"] do={
:local nam value=[queue simple get value-name=name $i]
:local lng [:len $nam]
:local pppus [pick $nam 7 ($lng-1)]
/ppp active remove [find where name="$pppus"]
:log info ("Speed for user: ".$pppus." changed")
}
1. Для каждой очереди подходящей под условия (Rx и Tx пишем необходимые вам, параметры берем из создаваемой очереди и пишем именно в кавычках)
2. Берем имя (будет в формате <pppoe-XXXXX>)
3. вычисляем его длинну
4. Забираем из имени только логин
5 Разрываем сессию с полученным логином
6. Отчитываемся в лог