Схема у нас простая. Обычный, стандартный PPPoE на SmarEdge. Устройство использует SmartEdgeServiceActivator и наш SmartEdgeProtocolHandler вот такого вот вида. Лог сейчас отправлю на почту.
Цитата:
package ru.usinsknet.modules.inet.dyn.redback;
import ru.bitel.bgbilling.modules.inet.dyn.device.redback.*;
import org.apache.log4j.Logger;
import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler;
import ru.bitel.bgbilling.kernel.network.radius.RadiusDictionary;
import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket;
import ru.bitel.bgbilling.kernel.network.radius.RadiusProtocolHandler;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusProtocolHandler;
import ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.ParameterMap;
import ru.bitel.common.Utils;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.radius.RadiusStandartAttributes;
public class SmartEdgeProtocolHandler
extends ru.bitel.bgbilling.modules.inet.dyn.device.redback.SmartEdgeProtocolHandler
implements RadiusProtocolHandler, DhcpProtocolHandler
{
private static final Logger logger = Logger.getLogger( SmartEdgeProtocolHandler.class );
@Override
public void preprocessAccessRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
super.preprocessAccessRequest( request, response, connectionSet );
setCallingStationId( request );
}
@Override
public void preprocessAccountingRequest( RadiusPacket request, RadiusPacket response, ConnectionSet connectionSet )
throws Exception
{
super.preprocessAccountingRequest( request, response, connectionSet );
setCallingStationId( request );
}
/**
* Установка MAC-адреса из RADIUS-атрибута.
* @param request
*/
protected void setCallingStationId( final RadiusPacket request )
{
// Переносим MAC в Called-Station-Id
final Object macAddress = getAttributeValue( request, 2352, 145, null );
if( macAddress != null )
{
if( macAddress instanceof String )
{
request.setStringAttribute( -1, RadiusStandartAttributes.Called_Station_Id, (String)macAddress);
}
else
{
logger.error( "Unknown type for macAddress attribute." );
}
}
// Переносим UserName в Calling-Station-Id
final String userName = request.getStringAttribute( -1, RadiusStandartAttributes.User_Name, null);
if( userName != null )
request.setStringAttribute( -1, RadiusStandartAttributes.Calling_Station_Id, userName);
}
}