13.3. Слушатель InetRadiusListener

13.3.1. Процессор ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor
13.3.1.1. Посервисный аккаунтинг
13.3.1.2. Пример конфигурации устройства-NAS'а

Слушатель предназначен для обработки RADIUS-пакетов. Общие сведения о протоколе RADIUS доступны здесь.

Добавляется в контейнер следующим образом.

 <context name="radius">
	 <!-- Cоздание процессора RADIUS-пакетов -->
  <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/>
  
  <!-- Служебный ScheduledExecutorService, необходимый для dataLogger -->
  <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" />

  <!-- Cоздание dataLogger, сохраняющего RADIUS-пакеты на диск (только один экземпляр) -->
  <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger">
   <param name="scheduledExecutor">hrlydtlggr</param>
  </bean>

  <!-- Cоздание слушателя RADIUS-пакетов на порту с передачей ему процессора и dataLogger -->
  <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener">
   <constructor>
    <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех -->
    <param name="host" value=""/>
    <!-- Порт, на котором будет открыт сокет -->
    <param name="port" value="1812"/>
    <!-- Размер буфера приема слушателя -->
    <param name="recvBufferSize">512 * 1024</param>
    <!-- Рекомендуемый SO_RCVBUF-сокета -->
    <param name="soRCVBUF"></param>
    <!-- Количество потоков-обработчиков -->
    <param name="threadCount">10</param>
    <!-- Максимальное количество пакетов в очереди на обработку -->
    <param name="maxQueueSize">200</param>
    <!-- Передача процессора -->
    <param name="processor">radiusProcessor</param>
    <!-- Режим работы, RadiusListener.Mode.authentication -->
    <param name="mode">RadiusListener.Mode.authentication</param>
    <!-- Передача dataLogger -->
    <param name="dataLogger">radiusDataLogger</param>
   </constructor>
  </bean>
 </context>

Параметры:

radiusProcessor - класс процессора, реализующий логику обработки пакетов;
radiusDataLogger - объект, осуществляющий запись бинарных логов, по умолчанию это объект типа ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger (сохранение бинарных логов с разбивкой по источникам и часам);
host - IP-адрес, на котором слушатель, пустое значение - прослушивать любой IP-адрес;
port - прослушиваемый UDP-порт;
soRCVBUF - рекомендуемый SO_RCVBUF (socket recieve buffer) для сокета. На FreeBSD большие значения могут вызвать ошибку и сервер не запустится;
byteBufferCapacity - размер буфера для приёма пакетов;
threadCount - число потоков-обработчиков пакетов, рекомендуемые значения 10-30, не рекомендуется указывать более 100;
maxQueueSize - максимальный размер очереди пакетов, при превышении размера очереди пакеты начинают отбрасываться и высылается аларм, рекомендуемые значения 200-1000. Следует учитывать, что если по какой-то причине сервер не успевает обрабатывать пакеты, очередь растет, то какие-то пакеты из очереди могут быть обработаны с опозданием и NAS уже выслал повторный запрос, который опять попадет в очередь и опять может быть обработан с опозданием. Поэтому большое значение вместо распределения нагрузки может вызвать ее увеличение;
mode - режим работы, может принимать значения RadiusListener.Mode.authentication для обработки Access-Request-пакетов в InetAccess и RadiusListener.Mode.accounting для обработки Accounting-пакетов в InetAccounting.