Для учета операторского трафика по протоколу Radius создается отдельный договор для оператора и нем создается аккаунт.


Далее в настройках NAS-должны быть настроен обработчик процессора протокола в котором мы выставляем опцию VoiceNas.OPERATOR_ACCOUNT - id аккаунта.
Пример обработчика
package ru.bitel;
import java.util.Iterator;
import java.util.List;
import bitel.billing.server.radius.CiscoVendor;
import bitel.billing.server.radius.Vendors;
import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute;
import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute.RadiusAttributeString;
import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket;
import ru.bitel.bgbilling.modules.voice.access.om.ProtocolHandler;
import ru.bitel.bgbilling.modules.voice.api.common.bean.VoiceDevice;
import ru.bitel.bgbilling.modules.voice.api.common.bean.VoiceDeviceType;
import ru.bitel.bgbilling.modules.voice.radius.VoiceNas;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.ParameterMap;
import ru.bitel.common.sql.ConnectionSet;
public class Prot3
implements ProtocolHandler
{
@Override
public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
String prefix = "remote-media-address";
List<RadiusAttribute<?>> attributes = request.getAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair );
if( attributes != null )
for( Iterator<RadiusAttribute<?>> it = attributes.iterator(); it.hasNext(); )
{
RadiusAttributeString ra = (RadiusAttributeString) it.next();
String value = ra.getValue();
if( value.startsWith( prefix ) )
{
if( value.endsWith( "77.82.17.33" ) )
{
request.setOption( VoiceNas.OPERATOR_ACCOUNT, 1 );
break;
}
else if( value.endsWith( "172.36.104.61" ) )
{
request.setOption( VoiceNas.OPERATOR_ACCOUNT, 2 );
break;
}
}
}
}
@Override
public void init( Setup setup1, int int2, VoiceDevice voiceDevice3, VoiceDeviceType voiceDeviceType4, ParameterMap parameterMap5 )
throws Exception
{
}
@Override
public void postprocessAccountingRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 )
throws Exception
{
}
@Override
public void postprocessAccessRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 )
throws Exception
{
}
@Override
public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
}
}
В результате на этом договоре мы получаем отчет с сессиями оператора.