Коллеги, у меня биллинг отказывается управлять данными свитчами.
Пробовал со стандартными - управление через SNMP, настройки делал, как для 3526 - не работает.
Попытался реализовать скриптовый шлюз (как в Wiki
http://wiki.bgbilling.ru/index.php/Реалиазация_скриптовго_шлюза_для_коммутаторов_DES-3526,_DES-3550,_DES-3828,_DES-3852,_DGS-3200-10_и_им_подобных), биллинг напрочь отказывается коннектиться по телнету к свитчу:
Сервер: вер. 5.1 сборка 491 от 14.09.2010
IPN: вер. 5.1 сборка 194 от 26.08.2010
Код:
[root@bgb log]# uname -a
Linux bgb.westtel.net 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
[root@bgb log]# java -version
java version "1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
Тип шлюза для DES-3200
Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.DlinkContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.DlinkGateWorker
use.script=1
Скрипт взят из Wiki:
Код:
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import bitel.billing.common.IPUtils;
import bitel.billing.common.module.ipn.IPNContractStatus;
import bitel.billing.server.ipn.UserStatus;
import bitel.billing.server.ipn.bean.ManadUtils;
import bitel.billing.server.ipn.bean.VlanManager;
import bitel.billing.server.ipn.dlink.UserPortStatus;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.server.util.telnet.TelnetSession;
protected void doSync()
{
try
{
String host = gate.getHost();
int port = gate.getPort();
DefaultServerSetup gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );
String pswd = gate.getKeyword();
String login = gateSetup.getStringValue( "login");
StringBuffer result = new StringBuffer();
if( log.isDebugEnabled() )
{
log.debug( gate.getId() + " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
}
TelnetSession session = new TelnetSession( host, port);
session.setLoginPromptSequence( ":" );
log.debug( "before connect" );
session.connect();
log.debug( "after connect" );
result.append( session.doCommand( login ) );
log.debug( "after command" );
session.setLoginPromptSequence( "#" );
result.append( session.doCommand( pswd ) );
log.debug( "before pswd" );
log.debug( "execute commands" );
doCommands( session, result, gateSetup);
//TODO commands here
session.setLoginPromptSequence( "****" );
result.append( session.doCommand( "logout" ) );
log.info( result.toString() );
log.debug( "ok" );
} catch (Exception e)
{
throw new RuntimeException ( e );
}
}
private void doCommands( TelnetSession session, StringBuffer result, DefaultServerSetup gateSetup)
throws IOException
{
String openAddress = gateSetup.getStringValue( "open.address", "255.255.255.255" ) ;
log.debug( "openAddress = " + openAddress );
uplinks = Utils.stringToIntegerList( gateSetup.getStringValue( "uplink" ) );
List ports = getUserList( statusList );
String [] openRules = new String [] {
//Профиль 20 Разрешаем клиенту видеть мир
// разрешающие правила добавляются с номером порта клиента
"config access_profile profile_id 20 add access_id ${port} ip source_ip ${ip} destination_ip 0.0.0.0 port ${port} permit"};
String [] closeRules = new String [] {
// Профиль 8 разрешаем клиенту видеть Стат+ДНС сервер
// разрешающие правила добавляются с номером порта клиента
"config access_profile profile_id 8 add access_id ${port} ip source_ip ${ip} destination_ip ${openAdress} port ${port} permit",
//Профиль 12 Разрешаем ИП запросы на аплинках на адрес клиента со статистики
"config access_profile profile_id 12 add access_id ${mod}${port} ip source_ip ${openAdress} destination_ip ${ip} port ${upport} permit",
//16 Запрещаем ИП запросы на аплинках на адрес клиента
"config access_profile profile_id 16 add access_id ${mod}${port} ip source_ip 0.0.0.0 destination_ip ${ip} port ${upport} deny"};
for( UserPortStatus port : ports )
{
log.debug("port.ipAddr=" + port.ipAddr);
//удаляюшие правила
if ( port.status.status == IPNContractStatus.STATUS_REMOVED )
{
int [] profiles = new int [] { 8, 20 };
for (int profile : profiles)
{
String rule = "config access_profile profile_id " + profile + " delete access_id " + port.port;
log.debug("rule=" + rule);
result.append( session.doCommand( rule ) );
}
int [] profiles = new int [] { 12, 16 };
for (int profile : profiles)
{
for (int j = 0; j < uplinks.size(); j++)
{
Integer upport = uplinks.get(j);
pref = j > 0 ? String.valueOf( j * 10 ) : "";
String rule = "config access_profile profile_id " + profile + " delete access_id " + pref + port.port;
log.debug("rule=" + rule);
result.append( session.doCommand( rule ) );
}
}
}
else
if ( port.status.status == IPNContractStatus.STATUS_OPEN )
{
int [] profiles = new int [] { 8 };
for (int profile : profiles)
{
String rule = "config access_profile profile_id " + profile + " delete access_id " + port.port;
log.debug("rule=" + rule);
result.append( session.doCommand( rule ) );
}
int [] profiles = new int [] { 12, 16 };
for (int profile : profiles)
{
for (int j = 0; j < uplinks.size(); j++)
{
Integer upport = uplinks.get(j);
pref = j > 0 ? String.valueOf( j * 10 ) : "";
String rule = "config access_profile profile_id " + profile + " delete access_id " + pref + port.port;
log.debug("rule=" + rule);
result.append( session.doCommand( rule ) );
}
}
//20
rule = openRules[0];
rule = setValues( rule, port.port, port.ipAddr, openAddress, "" );
log.info("rule=" + rule);
result.append( session.doCommand( rule ) );
}
else //close
{
int [] profiles = new int [] { 20 };
for (int profile : profiles)
{
String rule = "config access_profile profile_id " + profile + " delete access_id " + port.port;
log.debug("rule=" + rule);
result.append( session.doCommand( rule ) );
}
//8
rule = closeRules[0];
rule = setValues( rule, port.port, port.ipAddr, openAddress, "" );
log.info("rule=" + rule);
result.append( session.doCommand( rule ) );
//12, 16
for (int j = 0; j < uplinks.size(); j++)
{
Integer upport = uplinks.get(j);
for (int i = 1; i < 3; i++)
{
rule = closeRules[i];
rule = setValues( rule, port.port, port.ipAddr, openAddress, String.valueOf( upport ) );
rule = rule.replaceAll( "\\$\\{mod\\}" , String.valueOf( j * 10 ) );
log.info("rule=" + rule);
result.append( session.doCommand( rule ) );
}
}
}
}
}
private String setValues( String rule, int port, String ip, String openAddress, String upport )
{
rule = rule.replaceAll( "\\$\\{port\\}", String.valueOf( port ) );
rule = rule.replaceAll( "\\$\\{ip\\}" , ip );
rule = rule.replaceAll( "\\$\\{openAdress\\}", openAddress );
rule = rule.replaceAll( "\\$\\{upport\\}", upport );
return rule;
}
protected void doParentSync()
{
}
public List getUserList( List statusList )
{
List userList = new ArrayList();
for( UserStatus status : statusList )
{
String rule = status.rule.getRuleText();
StringTokenizer st = new StringTokenizer( rule, ";" );
while( st.hasMoreTokens() )
{
String token = st.nextToken().trim();
data = token.split( ":" );
if( data.length == 2 )
{
UserPortStatus portStatus = new UserPortStatus();
portStatus.port = Utils.parseIntString( data[0] );
portStatus.ipAddr = data[1];
portStatus.status = status;
userList.add( portStatus );
}
else if ( data.length == 3 )
{
UserPortStatus portStatus = new UserPortStatus();
portStatus.port = Utils.parseIntString( data[0] );
portStatus.macAddr = data[1].toUpperCase().replaceAll( "\\-", " " );
portStatus.ipAddr = data[2];
portStatus.status = status;
userList.add( portStatus );
}
}
}
return userList;
}
Сам шлюз:
Код:
Хост и порт шлюза: 10.49.64.183:23 Ключевое слово: мой админский пароль на свитче
Конфигурация:
login=crez
open.address=91.199.153.0
open.mask=255.255.255.248
uplink=25,26,27,28
При закрытии и открытии шлюза в логе сервера вот это:
Закрываю
Код:
09-20/13:32:12 INFO [Thread-95] DlinkGateWorker - Running script
09-20/13:32:12 ERROR [Thread-95] DlinkGateWorker - Eval error2: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace
Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
at bsh.BSHType.getType(BSHType.java:154)
at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
at bsh.Interpreter.eval(Interpreter.java:653)
at bsh.Interpreter.eval(Interpreter.java:747)
at bsh.Interpreter.eval(Interpreter.java:736)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - java.lang.RuntimeException: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:276)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - Caused by: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHType.getType(BSHType.java:154)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:653)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:747)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:736)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
09-20/13:32:12 ERROR [Thread-95] LoggingPrintStream - ... 2 more
09-20/13:32:12 ERROR [Thread-95] DlinkGateWorker - Gate unaccesible - 10.49.64.183
09-20/13:32:12 ERROR [Thread-95] DlinkGateWorker - -------------------------
09-20/13:32:12 ERROR [Thread-95] DlinkGateWorker - error: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
java.lang.RuntimeException: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:276)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
Caused by: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
at bsh.BSHType.getType(BSHType.java:154)
at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
at bsh.Interpreter.eval(Interpreter.java:653)
at bsh.Interpreter.eval(Interpreter.java:747)
at bsh.Interpreter.eval(Interpreter.java:736)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
... 2 more
Открываю
Код:
09-20/13:32:19 INFO [Thread-98] DlinkGateWorker - Running script
09-20/13:32:19 ERROR [Thread-98] DlinkGateWorker - Eval error2: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace
Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
at bsh.BSHType.getType(BSHType.java:154)
at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
at bsh.Interpreter.eval(Interpreter.java:653)
at bsh.Interpreter.eval(Interpreter.java:747)
at bsh.Interpreter.eval(Interpreter.java:736)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - java.lang.RuntimeException: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:276)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - Caused by: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHType.getType(BSHType.java:154)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:653)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:747)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bsh.Interpreter.eval(Interpreter.java:736)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
09-20/13:32:19 ERROR [Thread-98] LoggingPrintStream - ... 2 more
09-20/13:32:19 ERROR [Thread-98] DlinkGateWorker - Gate unaccesible - 10.49.64.183
09-20/13:32:19 ERROR [Thread-98] DlinkGateWorker - -------------------------
09-20/13:32:19 ERROR [Thread-98] DlinkGateWorker - error: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
java.lang.RuntimeException: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:276)
at bitel.billing.server.ipn.GateWorker.doParentSync(GateWorker.java:187)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:100)
Caused by: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : Class: GateWorker not found in namespace : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.InputStreamReader; import java.n . . . '' : GateWorker
at bsh.BSHAmbiguousName.toClass(BSHAmbiguousName.java:74)
at bsh.BSHType.getType(BSHType.java:154)
at bsh.BSHFormalParameter.eval(BSHFormalParameter.java:67)
at bsh.BSHFormalParameters.eval(BSHFormalParameters.java:107)
at bsh.BSHMethodDeclaration.evalNodes(BSHMethodDeclaration.java:153)
at bsh.BSHMethodDeclaration.eval(BSHMethodDeclaration.java:122)
at bsh.Interpreter.eval(Interpreter.java:653)
at bsh.Interpreter.eval(Interpreter.java:747)
at bsh.Interpreter.eval(Interpreter.java:736)
at bitel.billing.server.ipn.GateWorker$ScripterParent.invokeMethod(GateWorker.java:357)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:262)
... 2 more
Ничего не получается, с BeanShell-ом к сожалению не дружу, поэтому не понимаю, почему не работает.
Помогите, плиз, реализовать управление, а то 3526 пропали из продажи и все новые свитчи идут 3200.
P.S. В логе свитча, естественно, пусто - биллинг даже не пытается к нему коннектиться. Ручками телнетом на свич захожу.