3 вопроса техподдержке, и людям которые писали свои шлюзы..
Вопрос 1.
Используем реализацию стандартного шлюза DHCP совместно с дочерним манадом
из
viewtopic.php?f=7&t=4080&start=30 В логах выдает следующее смотрите ниже… ругается на setEncoding ( "UTF-8" )
Если не использовать скрипт - то подобной проблемы не наблюдается, но дочерние узлы не опрашиваются скрипт на ДХЦП
09-13/03:00:02 DEBUG [pool-40-thread-2] SwitchGateWorker - parentSync Manad-BGDHCP
09-13/03:00:02 DEBUG [pool-40-thread-2] SwitchGateWorker - 61 gate: 127.0.0.1:4566
09-13/03:00:02 DEBUG [pool-40-thread-2] SwitchGateWorker - 62 childgate: 10.90.1.33:161
09-13/03:00:02 ERROR [pool-40-thread-2] SwitchGateWorker - Eval error2: Error in method invocation: Cannot access method setEncoding( java.lang.String ) in 'interface org.apache.xml.serializer.XSLOutputAttributes' :java.lang.IllegalAccessException: Class bsh.Reflect can not access a member of class org.apache.xml.serializer.XSLOutputAttributes with modifiers "public abstract"
Error in method invocation: Cannot access method setEncoding( java.lang.String ) in 'interface org.apache.xml.serializer.XSLOutputAttributes' :java.lang.IllegalAccessException: Class bsh.Reflect can not access a member of class org.apache.xml.serializer.XSLOutputAttributes with modifiers "public abstract" : at Line: 76 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : stream .setEncoding ( "UTF-8" )
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHTryStatement.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BshMethod.invokeImpl(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:318)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:246)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:171)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:84)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
09-13/03:00:02 ERROR [pool-40-thread-2] SwitchGateWorker - Gate unaccesible - 10.90.1.33
09-13/03:00:02 ERROR [pool-40-thread-2] SwitchGateWorker - -------------------------
09-13/03:00:02 ERROR [pool-40-thread-2] SwitchGateWorker - error: Error in method invocation: Cannot access method setEncoding( java.lang.String ) in 'interface org.apache.xml.serializer.XSLOutputAttributes' :java.lang.IllegalAccessException: Class bsh.Reflect can not access a member of class org.apache.xml.serializer.XSLOutputAttributes with modifiers "public abstract" : at Line: 76 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : stream .setEncoding ( "UTF-8" )
java.lang.RuntimeException: Error in method invocation: Cannot access method setEncoding( java.lang.String ) in 'interface org.apache.xml.serializer.XSLOutputAttributes' :java.lang.IllegalAccessException: Class bsh.Reflect can not access a member of class org.apache.xml.serializer.XSLOutputAttributes with modifiers "public abstract" : at Line: 76 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : stream .setEncoding ( "UTF-8" )
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:259)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:171)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:84)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: Error in method invocation: Cannot access method setEncoding( java.lang.String ) in 'interface org.apache.xml.serializer.XSLOutputAttributes' :java.lang.IllegalAccessException: Class bsh.Reflect can not access a member of class org.apache.xml.serializer.XSLOutputAttributes with modifiers "public abstract" : at Line: 76 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : stream .setEncoding ( "UTF-8" )
at bsh.BSHMethodInvocation.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHPrimaryExpression.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BSHTryStatement.eval(Unknown Source)
at bsh.BSHBlock.evalBlock(Unknown Source)
at bsh.BSHBlock.eval(Unknown Source)
at bsh.BshMethod.invokeImpl(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bsh.BshMethod.invoke(Unknown Source)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:318)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:246)
... 8 more
09-13/03:00:03 DEBUG [pool-2-thread-2] IPNTestGates - Now 1 gates..
09-13/03:00:03 DEBUG [pool-2-thread-2] IPNTestGates - working gate ids: 62
09-13/03:00:03 INFO [pool-2-thread-2] IPNTestGates - Gate: 10.90.1.33 : 161 [ MKR1_77_1
private ] - checking end..
09-13/03:00:04 DEBUG [pool-2-thread-2] IPNTestGates - Now 0 gates..
09-13/03:00:04 DEBUG [pool-2-thread-2] IPNTestGates - working gate ids:
09-13/03:00:04 INFO [pool-2-thread-2] IPNTestGates - Locked clients:
09-13/03:00:04 INFO [pool-2-thread-2] IPNTestGates -
09-13/03:00:04 INFO [pool-2-thread-2] IPNTestGates - Task finished time=2119
Вопрос 2.
Пробуем реализовать связь- создать свой шлюз типа делинка… но не получается сделать нормальную родительскую связь между родителем- DHCP сервером и потомком шлюзом-типа свичь… для предачи правильных параметров ип-порт в DHCP сервер…
Как реализовать связь родитель-потомок для скриптовых шлюзов?
У нас то и скрипт простой…
Конфигурация
user_rule.editor.class=bitel.billing.module.services.ipn.editor.EmptyContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.SwitchGateWorker
snmp.version=2c
use.script=1
Само тело скрипта работает но оно не передает родителю номер порта…
import uk.co.westhawk.snmp.pdu.*;
import uk.co.westhawk.snmp.stack.*;
import ru.bitel.common.*;
import bitel.billing.server.util.*;
import bitel.billing.server.ipn.*;
import bitel.billing.common.module.ipn.*;
import ru.bitel.bgbilling.modules.ipn.server.bean.GatePortManager;
String PDU_PREFIX = "1.3.6.1.2.1.2.2.1.7";
int requestCount = 0;
SnmpContext context = null;
protected void doSync()
{
log.debug("doSync running ...");
String host = gate.getHost();
int port = gate.getPort();
int gid = gate.getId();
if( log.isDebugEnabled() )
{
log.debug( gid + " gate: " + host + ":" + port + " commutinty " + gate.getKeyword() );
}
try
{
String snmpVersion = gate.getGateType().getConfigOption( "snmp.version" );
if( Utils.isBlankString( snmpVersion ) )
{
snmpVersion = "1";
}
if( log.isDebugEnabled() )
{
log.debug( "use SNMP version: " + snmpVersion );
}
if( !snmpVersion.equals( "0" ) )
{
if ( snmpVersion.equals( "2" ) || snmpVersion.equals( "2c" ) )
{
context = new SnmpContextv2c( host, port );
}
else
{
context = new SnmpContext( host, port );
}
context.setCommunity( gate.getKeyword() );
SnmpUtils.setBufferSizes( context, 2, 2 );
OneSetPdu setPdu = new OneSetPdu( context );
setPdu.addObserver( this );
for( UserStatus status : statusList )
{
GatePortManager PortManager = new GatePortManager( con, mid );
Ports = PortManager.getGatePorts( status.contractId, gate.getId() );
Port=null;
for( Port : Ports )
{
//log.debug("cid="+ status.contractId+" port=" +String.valueOf(Port) );
}
//Обход пользовательских правил
//String ports = status.rule.getRuleText();
//StringTokenizer st = new StringTokenizer( ports, "," );
log.debug( "Checking contract "+status.contractId);
// while( st.hasMoreTokens() )
// {
//int ifNumber = Utils.parseIntString( st.nextToken().trim(), -1 );
//Берем порт из свойств шлюза в договоре
int ifNumber = Utils.parseIntString( String.valueOf(Port), -1 );
//log.debug( "ifNumber=" + ifNumber );
if( ifNumber >= 0 )
{
int value = 2;
if( status.status == IPNContractStatus.STATUS_OPEN )
{
value = 1;
log.debug("ifup port# " + ifNumber);
}
else
{
value = 2;
log.debug("ifdown port# " + ifNumber);
}
setPdu.addOid( PDU_PREFIX + "." + ifNumber, new AsnInteger( value ) );
if( log.isDebugEnabled() )
{
log.debug( "Add oid " + host + " " + PDU_PREFIX + "." + ifNumber + " i " + value );
}
}
//}
}
setPdu.send();
requestCount++;
waitResponse();
}
}
catch ( Exception e )
{
throw new RuntimeException ( e );
}
finally
{
if( context != null )
{
context.destroy();
}
}
}
/* protected void parentSync()
{
log.debug("doParentSync running ...");
}*/
protected void waitResponse()
throws InterruptedException
{
while( requestCount != 0 )
{
Thread.sleep( 100 );
}
}
public void update( Observable o, Object arg )
{
requestCount--;
if( arg instanceof AgentException )
{
log.error( arg );
gateErrors.append(
"Ошибка шлюза " + gate.getHost() +
" : " + ((AgentException)arg).getMessage() );
//interrupt();
}
}
public boolean isWorking()
{
return isAlive() || requestCount != 0;
}
Вопрос 3
Не могли бы вы скинуть исподники IPN модуля- в принципе мы уже разобрались- «декомпилили» что нам нужно исправить-дополнить нужное в шлюзе типа делинк но нам нужно заново собрать-скомпилить… ну и комментарии в исходнике хотелось бы почитать