Econat начинает новую сессию после переключения сервиса (скорости/доступа), текущий включенный сервис приходит в RADIUS-Accounting в атрибуте Cisco-Service-Info.
Создайте тип устройства Econat, укажите в поле Обработчик активации сервисов: ru.bitel.bgbilling.modules.inet.dyn.device.radius.CoAServiceActivator, а в поле Обработчик процессора протокола: ru.bitel.bgbilling.modules.inet.dyn.device.rdp.EconatProtocolHandler.
В конфигурации данного типа устройства укажите:
# Порт для отправки PoD и CoA-запросов (по умолчанию - порт, заданный в устройстве в поле Хост/порт) radius.port=3799 # Режим поиска сервиса (аккаунта) договора: по IP-адресу (если в аккаунте указан статический адрес) radius.servSearchMode=7 # Нужно ли проверять пароль: 0 - нет (например, для IPoE), 1 (по умолчанию) - да. radius.password.verification=0 # Берем адрес из Access-Request radius.address.fromRequest=1 # Какие адреса выдавать при ответе Access-Accept в состоянии disable: # 0 (по умолчанию) - из radius.disable.ipCategories, 1 - так же, как если бы не было ошибки (в том числе привязанные к сервису в договоре) radius.disable.mode=0 # При выдаче Access-Accept добавлять запись в базу. # Hеобходимо, если используется Reject-To-Accept и по Start-пакету нельзя определить в каком состоянии соединение connection.start.fromAccept=1 # Таймаут перевода соединения в статус suspended при отсутствии радиус пакетов сессии connection.suspend.timeout=3600 # Таймаут закрытия соединения при отcутствии радиус пакетов сессии (не складывается с connection.suspend.timeout) connection.close.timeout=3600 # При закрытии соединения по таймауту, 0 (по умолчанию) - просто закрыть, # 1 - попытаться сбросить также на NAS'е (вызвать connectionClose у обработчика активации сервисов) #connection.close.timeout.forceClose=1 # Атрибуты, выдаваемые при авторизации по реалму default (default - реалм по умолчанию) # Acct-Interim-Interval - требуемый интервал между Accounting-Update запросами по сессии от NAS'а radius.realm.default.attributes=Acct-Interim-Interval=900;Idle-Timeout=4200 # Шаблон опций-параметров сессий radius.inetOption.1.template=cisco-SSG-Account-Info=QU;;$in;;D;;$out # Какие адреса выдавать при ответе Access-Accept в состоянии disable: # 0 (по умолчанию) - из radius.disable.ipCategories, 1 - так же, как если бы не было ошибки (в том числе привязанные к сервису в договоре) radius.disable.mode=0 # Коды ошибок, при которых вместо reject выдавать accept с заданными атрибутами radius.disable.accessCodes=1,2,3,4,10,11,12,20,44 # Атрибуты, выдаваемые при ответе Access-Accept в состоянии disable radius.disable.1,2,3,4,11,20,44,62.attributes=Acct-Interim-Interval=90;cisco-SSG-Service-Info=AserviceBlock;Session-Timeout=86400 radius.disable.10,12.attributes=Acct-Interim-Interval=90;cisco-SSG-Service-Info=AserviceNomoney;Session-Timeout=86400 radius.disable.attributes=Acct-Interim-Interval=90;cisco-SSG-Service-Info=AserviceBlock # Атрибуты, отправляемые в CoA при необходимости ограничить доступ sa.radius.disable.attributes=Acct-Interim-Interval=90;cisco-SSG-Service-Info=AserviceNomoney # Атрибуты, отправляемые в CoA при необходимости включить доступ sa.radius.enable.attributes=Acct-Interim-Interval=600;cisco-SSG-Service-Info=Aservice300m # # При наличии данных сервисов в RADIUS-Accounting считаем, что у сессии состояние отключено (доступ ограничен) radius.serviceName.disable=serviceNomoney,serviceBlock # Логирование CoA/PoD-запросов (контекстное меню сессии - RADIUS-лог) sa.radius.log=1 # Атрибуты сессии, которые отправляются в CoA (для того, чтобы Econat идентифицировал, для какой сессии запрос) sa.radius.connection.attributes=User-Name # Не сбрасывать сессию при включении/отключении доступа (а менять параметры, отправлять CoA) sa.radius.connection.withoutBreak=1 # при значении 1 InetAccess при вызове для изменения состояния метода connectionModify из # CoAServiceActivator/ISGServiceActivator/SmartEdgeServiceActivator сразу поменяет состояние в БД (вызовет e.setConnectionStateModified( true ), # рекомендуется для CoAServiceActivator) # Для Econat не работает, т.к. после CoA создаётся новая сессия sa.radius.connection.stateModify=0 # Параметры активации сервисов # длина паузы, если возникла ошибка #sa.error.pause=60 # количество заданий за раз #sa.batch.size=20 # время (сек) ожидания завершения всех заданий (при асинхронной работе) #sa.batch.wait=5 # пауза (сек) после обработки заданий #sa.batch.pause=0 # время (сек) ожидания новой задачи перед вызовом disconnect. #sa.batch.waitNext=5
Статические IP-адреса
Если поиск абонента будет происходить по IP-адресу, указанному в сервисе договора, то в конфигурации типа сервиса нужно указать:
# Сервисы данного типа учавствуют в поиске по IP-адресу при RADIUS-аутентификации serv.search.address=1
При изменении данного параметра в существующем типе сервиса, с которым сервисы договора уже заведены, требуется перезапуск InetAccess/InetAccounting.
Адреса, выданные по DHCP
Для того, чтобы биллинг находил абонента по IP-адресу, ранее выданному ему по DHCP (с помощью InetDhcpProcessor и, возможно, DHCP Option 82), нужно:
- В inet-access.xml и inet-accounting.xml нужно заменить radiusProcessor с "ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor" на "ru.bitel.bgbilling.modules.inet.radius.InetRadiusHelperProcessor";
В конфигурации корневого устройства (Access+Accounting) указать в параметре radius.key.deviceTypeIds ID типа устройства Econat:
# Типы устройств с аутентификацией по IP-адресу () radius.key.deviceTypeIds=