Уровни
Зачастую необходима возможность управления глобально свойствами текущих соединений. Например, уменьшение пропускной способности каналов активных пользователей, но только в моменты пиковой загрузки внешнего канала. Для этого в 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.
В биллинге уровень передаётся в тарифный запрос при каждом обсчёте и воспринимается узлом Фильтр по уровню. В соответствии с уровнем могут изменяться зоны и текущие параметры соединения. Ниже приведён пример подобного тарифного плана.