Посервисный аккаунтинг
Для поддержки посервисного аккаунтинга (например, при использовании 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, то нужно назначить такую привязку: