Посервисный аккаунтинг

Для поддержки посервисного аккаунтинга (например, при использовании Cisco ISG или Redback CLIPS) в обработчике процессора протокола необходимо указывать AcctSessionId родительского соединения (аккаунтинга) и имя сервиса (ServiceName), по которому пришел аккаунтинг-пакет: request.setOption( InetRadiusProcessor.PARENT_ACCT_SESSION_ID, parentAcctSessionId ); и request.setOption( InetRadiusProcessor.SERVICE_NAME, serviceName );

Пример для Redback SmartEdge 100:

Код
@Override
public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
int acctStatusType = request.getIntAttribute( -1, RadiusDictionary.Acct_Status_Type, -1 );
 
switch( acctStatusType )
{
// если сервисный аккаунтинг
case 101:
case 102:
case 103:
{
// получаем id родительского соединения
final String parentAcctSessionId = request.getStringAttribute( -1, parentAcctSessionIdType, null );
// получаем имя сервиса, по которому идет аккаунтинг
final String serviceName = request.getStringAttribute( radiusVendor, serviceNameType, null );
// подменяем Acct-Status-Type, чтобы биллинг понял типы пакетов
request.setIntAttribute( -1, RadiusDictionary.Acct_Status_Type, acctStatusType - 100 );
// устанавливаем id родительской сессии
request.setOption( InetRadiusProcessor.PARENT_ACCT_SESSION_ID, parentAcctSessionId );
// устанавливаем имя сервиса текущего аккаунтинга
request.setOption( InetRadiusProcessor.SERVICE_NAME, serviceName );
}
break;
 
default:
{
}
break;
}
}

Тогда Accounting считает данное соединение как дочернее родительскому, а в поле username соединения (в базе) устанавливается ServiceName.

При обработке трафиков используется ServiceName - он может выступать в качестве фильтра правила привязки трафиков: если указано ServiceName, то данное правило будет отрабатывать только для сервисной сессии с таким ServiceName, и наоборот, если поле ServiceName в правиле пусто, то данное правило не будет отрабатывать ни для какой сервисной сессии.

В поле ServiceName можно указать несколько сервисов через запятую (RSE-SVC-EXT, RSE-SVC-EXT1024) или же указать REGEXP внутри двух слешей (/^RSE-SVC-EXT.*$/).

Например, если у вас внешний трафик идет посервисным аккаунтингом с ServiceName=RSE-SVC-EXT, то нужно назначить такую привязку:

images/download/attachments/43385870/inet_traffic_type_service.png