11.9. Уровни

Зачастую необходима возможность управления глобально свойствами текущих соединений. Например, уменьшение пропускной способности каналов активных пользователей, но только в моменты пиковой загрузки внешнего канала. Для этого в BGRadiusDialup реализована возможность сопоставления договорам неких абстрактных чисел - уровней. Если договору не сопоставлен уровень, то он считается нулевым. Сопоставление осуществляется командой set_levels на сокет управления RADIUS-сервера с указанием перечня договоров и уровней.

Формат команды: set_levels\n<levels>, где <levels> - набор записей <код договора>\t<уровень>\n

Например, передача извне файла с уровнями levels, содержащего уровни для договоров с кодами 4 и 5:

4\t1 
5\t2

Может быть осуществлена следующим образом (BGRadiusDialup установлен на локальной машине и его admin.port=1955):

echo ./levels | nc 127.0.0.1 1955

После выполнения команды set_levels для договоров, уровень которых не был передан, он становится нулевым. Переданные уровни сохраняются в файле levels в каталоге BGRadiusDialup, для возможности восстановления после перезагрузки BGRadiusDialup. Логика формирования уровней полностью отдана стороннему приложению. Пример подобного управляещего скрипта вы можете посмотреть в WiKi.

В биллинге уровень передаётся в тарифный запрос при каждом обсчёте и воспринимается узлом Фильтр по уровню. В соответствии с уровнем могут изменяться зоны и текущие параметры соединения. Ниже приведён пример подобного тарифного плана.