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