forum.bitel.ru http://forum.bitel.ru/ |
|
Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) http://forum.bitel.ru/viewtopic.php?f=19&t=8742 |
Страница 1 из 1 |
Автор: | crez [ 03 дек 2013, 17:32 ] |
Заголовок сообщения: | Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
Добавлено: В продолжение темы: возник еще вопрос по работе этого скрипта: viewtopic.php?f=19&t=8742#p72914 При переходе 5.1 -> 6.0 столкнулись с проблемой неработоспособности шлюза. В 5.1 все работало, при апгрейде до 6.0 скрипт перестал работать. Скрипт, работающий в 5.1: Код: 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 ru.bitel.common.Preferences; import bitel.billing.server.util.Utils; import bitel.billing.server.util.telnet.TelnetSession; import bitel.billing.server.ipn.GateWorker; protected void doSync() { try { String host = gate.getHost(); int port = gate.getPort(); Preferences gateSetup = new Preferences( gate.getConfig(), "\r\n" ); String pswd = gate.getKeyword(); String login = gateSetup.get("login","admin"); int timeout = gateSetup.getInt( "timeout", 10000 ); int socketTimeout = gateSetup.getInt( "socket.timeout", 10000 ); 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.setTimeout( timeout ); session.setSocketTimeTimeout( socketTimeout ); //session.setLoginPromptSequence( ":" ); session.setEndString( ":" ); log.debug( "before connect" ); session.connect(); log.debug( "after connect" ); result.append( session.doCommand( login ) ); log.debug( "after command" ); //session.setLoginPromptSequence( "#" ); session.setEndString( ":" ); result.append( session.doCommand( pswd ) ); log.debug( "before pswd" ); log.debug( "execute commands" ); doCommands( session, result, gateSetup); //TODO commands here //session.setLoginPromptSequence( "****" ); session.setEndString( "****" ); result.append( session.doCommand( "logout" ) ); log.debug( result.toString() ); log.debug( "ok" ); } catch (Exception e) { throw new RuntimeException ( e ); } } private void doCommands( TelnetSession session, StringBuffer result, Preferences gateSetup) throws IOException { String openAddress = gateSetup.get( "open.address", "255.255.255.255" ) ; log.debug( "openAddress = " + openAddress ); uplinks = Utils.stringToIntegerList( gateSetup.get( "uplink", "25,26,27,28" ) ); int vidlan = gateSetup.getInt( "vid.lan", 0 ); int vidwan = gateSetup.getInt( "vid.wan", 0 ); int vid = 0; log.debug( "vid.lan = " + vidlan ); log.debug( "vid.wan = " + vidwan ); if ( vidlan==0 || vidwan==0 ) { log.debug( "Не указаны параметры vid.lan, vid.wan. Без них шлюз работать не может." ); return 1; } List ports = getUserList( statusList ); String [] openRules = new String [] { // Профиль 2 - Разрешаем клиенту ARP только с его IP // разрешающие правила добавляются с номером порта клиента // ip абонента в hex1 и hex2 "config access_profile profile_id 2 add access_id ${port} packet_content offset_chunk_2 0x806 mask 0xFFFF offset_chunk_3 0x${hex1} mask 0xFFFF offset_chunk_4 0x${hex2}0000 mask 0xFFFF0000 port ${port} permit", // Профиль 3 - Разрешаем клиенту трафик с его IP // разрешающие правила добавляются с номером порта клиента // происходит привязка порта абонента к его IP "config access_profile profile_id 3 add access_id ${port} ip source_ip ${ip} port ${port} permit", // Включаем порт абонента "config vlan vlanid ${vid} add untagged ${port}", // Включаем ТВ на порту абонента "config igmp_snooping multicast_vlan IPTV add member_port ${port}" }; String [] closeRules = new String [] { // Отключаем ТВ "config igmp_snooping multicast_vlan IPTV delete member_port ${port}" }; String [] deleteRules = new String [] { // Профиль 2 - удаляем разрешения ARP // правила удаляются с номером порта клиента "config access_profile profile_id 2 delete access_id ${port}", // Профиль 3 - удаляем разрешение на IP трафик с порта "config access_profile profile_id 3 delete access_id ${port}", // Удаляем порт абонента "config vlan vlanid ${vid} delete ${port}" }; for( UserPortStatus port : ports ) { log.debug("port.ipAddr=" + port.ipAddr); String ipaddress = port.ipAddr; // проверка принадлежности порта к vlan Pattern p = Pattern.compile("^193.*"); Matcher m = p.matcher( ipaddress ); Pattern p2 = Pattern.compile("^176.*"); Matcher m2 = p2.matcher( ipaddress ); if (m.find() || m2.find()) { vid = vidwan; } else { vid = vidlan; } log.debug("vid=" + vid); // ----------------------- HEX CONVERT ------------------------ StringTokenizer st=new StringTokenizer(ipaddress,"."); String o1,o2,o3,o4 = ""; String hex1, hex2 = ""; if( st.countTokens()==4 ) { while( st.hasMoreTokens() ) { o1 = st.nextToken(); o2 = st.nextToken(); o3 = st.nextToken(); o4 = st.nextToken(); } i = Integer.parseInt(o1); j = Integer.parseInt(o2); k = Integer.parseInt(o3); l = Integer.parseInt(o4); o1 = Integer.toHexString(0x100 | i).substring(1); o2 = Integer.toHexString(0x100 | j).substring(1); o3 = Integer.toHexString(0x100 | k).substring(1); o4 = Integer.toHexString(0x100 | l).substring(1); hex1 = o1+o2; hex2 = o3+o4; print("hex ip=" + hex1 + " " + hex2); } // ------------------------------------------------------------ log.debug("status=" + port.status.status); log.debug("-------------------"); log.debug("is opened="+IPNContractStatus.STATUS_OPEN); log.debug("is closed="+IPNContractStatus.STATUS_CLOSED); log.debug("is removed="+IPNContractStatus.STATUS_REMOVED); log.debug("-------------------"); // удаляюшие правила if ( port.status.status == IPNContractStatus.STATUS_REMOVED ) { log.debug("-----------------REMOVE RULES -----------------"); for (String rule : closeRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } else if ( port.status.status == IPNContractStatus.STATUS_OPEN ) { log.debug("-----------------OPEN RULES -----------------"); // очищаем порт (на всякий случай) из LAN for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vidlan, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } // очищаем порт (на всякий случай) из WAN for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vidwan, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } // открывающие правила for (String rule : openRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } else //close { log.debug("-----------------CLOSE RULES BY DEFAUL -----------------"); for (String rule : closeRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } } } private String setValues( String rule, int port, String ip, String openAddress, int vid, String hex1, hex2 ) { rule = rule.replaceAll( "\\$\\{port\\}", String.valueOf( port ) ); rule = rule.replaceAll( "\\$\\{ip\\}" , ip ); rule = rule.replaceAll( "\\$\\{openAdress\\}", openAddress ); rule = rule.replaceAll( "\\$\\{vid\\}", String.valueOf( vid ) ); rule = rule.replaceAll( "\\$\\{hex1\\}" , hex1 ); rule = rule.replaceAll( "\\$\\{hex2\\}" , hex2 ); 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; } После апгрейда до 6.0 стал выдавать ошибку: Код: 12-03/15:19:13 INFO [Thread-20] DlinkGateWorker - Running script 12-03/15:19:14 ERROR [Thread-20] DlinkGateWorker - Eval error2: Attempt to resolve method: stringToIntegerList() on undefined variable or class name: Utils Attempt to resolve method: stringToIntegerList() on undefined variable or class name: Utils : at Line: 100 : in file: inline evaluation of: ``import java.io.IOException; import java.util.ArrayList; import java.util.HashMap . . . '' : Utils .stringToIntegerList ( gateSetup .get ( "uplink" , "25,26,27,28" ) ) Called from method: doCommands : at Line: 65 : in file: inline evaluation of: ``import java.io.IOException; import java.util.ArrayList; import java.util.HashMap . . . '' : doCommands ( session , result , gateSetup ) at bsh.UtilEvalError.toEvalError(UtilEvalError.java:85) at bsh.UtilEvalError.toEvalError(UtilEvalError.java:90) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:99) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHAssignment.eval(BSHAssignment.java:77) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BshMethod.invokeImpl(BshMethod.java:362) at bsh.BshMethod.invoke(BshMethod.java:258) at bsh.BshMethod.invoke(BshMethod.java:186) at bsh.Name.invokeLocalMethod(Name.java:917) at bsh.Name.invokeMethod(Name.java:804) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BSHBlock.eval(BSHBlock.java:47) at bsh.BSHTryStatement.eval(BSHTryStatement.java:86) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BshMethod.invokeImpl(BshMethod.java:362) at bsh.BshMethod.invoke(BshMethod.java:258) at bsh.BshMethod.invoke(BshMethod.java:161) at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:310) at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:266) at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:137) at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:95) В соседней теме выяснили, что изменилось написание команды: Код: uplinks = Utils.stringToIntegerList( gateSetup.get( "uplink", "25,26,27,28" ) ); Теперь, согласно документации, команда должна выглядеть так: Цитата: toIntegerList public static final java.util.List<java.lang.Integer> toIntegerList(java.lang.String valuesStr) Похожа на toList(String). Разбивает строку на список целочисленных компоненов, разбитых по запятым. Пробелы тримаются. Если между запятыми не числа, распарсятся в нули. Parameters: valuesStr - исходная строка Returns: List список целых, всегда есть и не null, если входящая строка пустая, то будет пустым. Если между запятыми не числа, распарсится в нули. See Also: toString(Collection), toIntegerSet(String) Меняю: Код: uplinks = Utils.toIntegerList( gateSetup.get( "uplink", "25,26,27,28" ) ); Добавляю в шапку: Код: import ru.bitel.common.Utils; На выходе снова получаю ошибку: Код: 12-03/15:30:10 INFO [Thread-34] DlinkGateWorker - Running script 12-03/15:30:10 ERROR [Thread-34] DlinkGateWorker - Eval error2: Attempt to resolve method: toIntegerList() on undefined variable or class name: Utils Attempt to resolve method: toIntegerList() on undefined variable or class name: Utils : at Line: 101 : in file: inline evaluation of: ``import java.io.IOException; import java.util.ArrayList; import java.util.HashMap . . . '' : Utils .toIntegerList ( gateSetup .get ( "uplink" , "25,26,27,28" ) ) Called from method: doCommands : at Line: 66 : in file: inline evaluation of: ``import java.io.IOException; import java.util.ArrayList; import java.util.HashMap . . . '' : doCommands ( session , result , gateSetup ) at bsh.UtilEvalError.toEvalError(UtilEvalError.java:85) at bsh.UtilEvalError.toEvalError(UtilEvalError.java:90) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:99) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHAssignment.eval(BSHAssignment.java:77) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BshMethod.invokeImpl(BshMethod.java:362) at bsh.BshMethod.invoke(BshMethod.java:258) at bsh.BshMethod.invoke(BshMethod.java:186) at bsh.Name.invokeLocalMethod(Name.java:917) at bsh.Name.invokeMethod(Name.java:804) at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BSHBlock.eval(BSHBlock.java:47) at bsh.BSHTryStatement.eval(BSHTryStatement.java:86) at bsh.BSHBlock.evalBlock(BSHBlock.java:131) at bsh.BSHBlock.eval(BSHBlock.java:81) at bsh.BshMethod.invokeImpl(BshMethod.java:362) at bsh.BshMethod.invoke(BshMethod.java:258) at bsh.BshMethod.invoke(BshMethod.java:161) at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:310) at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:266) at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:137) at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:95) Где я напортачил? ADD Centos 6.4 Код: [root@home2 BGBillingServer]# uname -a
Linux home2.link-spb.ru 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [root@home2 BGBillingServer]# mysql --version mysql Ver 14.14 Distrib 5.1.69, for redhat-linux-gnu (x86_64) using readline 5.1 [root@home2 BGBillingServer]# java -version java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) |
Автор: | Yarlan Zey [ 03 дек 2013, 17:52 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
яву 1.7 на сервере вроде пока не рекомендуют... |
Автор: | crez [ 03 дек 2013, 17:59 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
Как раз по ссылке из документации по установке выкачана. Цитата: 5.2. JDK Java - язык, на котором написан биллинг, является интерпретируемым и запускается с помощью специальной программы - Java-машины. Для нормальной работы необходимо JDK версии 1.6.0, либо выше. Последнюю версию для вашей платформы можно найти по адресу http://www.oracle.com/technetwork/java/javase/downloads. Необходимо загрузить именно Java SE JDK(Java-машина + средства разработки), а не JRE (только Java-машина), т.к. биллинг использует динамическую компиляцию кода, кроме того, средства разработки могут быть полезны при расследовании нештатных ситуаций в системе. Обратите внимание, что для нормальной работы приложений биллинга необходима JDK производства Oracle. Соответственно, приложения биллинга, в общем случае, могут быть запущены на любой платформе, для которой выпускается JDK. Это Windows, Linux, Solaris. В официальной поставке включены скрипты запуска только для Linux (Bash скрипты, скрипты сервисов для RPM-дистрибутивов) и Windows (Batch). JDK должна быть установлена на всех серверах с компонентами биллинга, в т.ч. на клиентских машинах. Также JDK необходим для запуска ActiveMQ. "Для нормальной работы необходимо JDK версии 1.6.0, либо выше. Последнюю версию для вашей платформы можно найти по адресу http://www.oracle.com/technetwork/java/javase/downloads. |
Автор: | Amir [ 03 дек 2013, 18:28 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
import ru.bitel.common.Utils; вместо import bitel.billing.server.util.Utils; |
Автор: | crez [ 03 дек 2013, 18:56 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
Верно подмечено! Закомментировал import bitel.billing.server.util.Utils;, команда прошла. Пока разбираюсь со следующей ошибкой... |
Автор: | crez [ 03 дек 2013, 19:10 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
Все заработало! Спасибо! Рабочий скрипт для 6.0 выглядит так: Код: 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 ru.bitel.common.Preferences; import ru.bitel.common.Utils; import bitel.billing.server.util.telnet.TelnetSession; import bitel.billing.server.ipn.GateWorker; protected void doSync() { try { String host = gate.getHost(); int port = gate.getPort(); Preferences gateSetup = new Preferences( gate.getConfig(), "\r\n" ); String pswd = gate.getKeyword(); String login = gateSetup.get("login","admin"); int timeout = gateSetup.getInt( "timeout", 10000 ); int socketTimeout = gateSetup.getInt( "socket.timeout", 10000 ); 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.setTimeout( timeout ); session.setSocketTimeTimeout( socketTimeout ); //session.setLoginPromptSequence( ":" ); session.setEndString( ":" ); log.debug( "before connect" ); session.connect(); log.debug( "after connect" ); result.append( session.doCommand( login ) ); log.debug( "after command" ); //session.setLoginPromptSequence( "#" ); session.setEndString( ":" ); result.append( session.doCommand( pswd ) ); log.debug( "before pswd" ); log.debug( "execute commands" ); doCommands( session, result, gateSetup); //TODO commands here //session.setLoginPromptSequence( "****" ); session.setEndString( "****" ); result.append( session.doCommand( "logout" ) ); log.debug( result.toString() ); log.debug( "ok" ); } catch (Exception e) { throw new RuntimeException ( e ); } } private void doCommands( TelnetSession session, StringBuffer result, Preferences gateSetup) throws IOException { String openAddress = gateSetup.get( "open.address", "255.255.255.255" ) ; log.debug( "openAddress = " + openAddress ); uplinks = Utils.toIntegerList( gateSetup.get( "uplink", "25,26,27,28" ) ); int vidlan = gateSetup.getInt( "vid.lan", 0 ); int vidwan = gateSetup.getInt( "vid.wan", 0 ); int vid = 0; log.debug( "vid.lan = " + vidlan ); log.debug( "vid.wan = " + vidwan ); if ( vidlan==0 || vidwan==0 ) { log.debug( "Не указаны параметры vid.lan, vid.wan. Без них шлюз работать не может." ); return 1; } List ports = getUserList( statusList ); String [] openRules = new String [] { // Профиль 2 - Разрешаем клиенту ARP только с его IP // разрешающие правила добавляются с номером порта клиента // ip абонента в hex1 и hex2 "config access_profile profile_id 2 add access_id ${port} packet_content offset_chunk_2 0x806 mask 0xFFFF offset_chunk_3 0x${hex1} mask 0xFFFF offset_chunk_4 0x${hex2}0000 mask 0xFFFF0000 port ${port} permit", // Профиль 3 - Разрешаем клиенту трафик с его IP // разрешающие правила добавляются с номером порта клиента // происходит привязка порта абонента к его IP "config access_profile profile_id 3 add access_id ${port} ip source_ip ${ip} port ${port} permit", // Включаем порт абонента "config vlan vlanid ${vid} add untagged ${port}", // Включаем ТВ на порту абонента "config igmp_snooping multicast_vlan IPTV add member_port ${port}" }; String [] closeRules = new String [] { // Отключаем ТВ "config igmp_snooping multicast_vlan IPTV delete member_port ${port}" }; String [] deleteRules = new String [] { // Профиль 2 - удаляем разрешения ARP // правила удаляются с номером порта клиента "config access_profile profile_id 2 delete access_id ${port}", // Профиль 3 - удаляем разрешение на IP трафик с порта "config access_profile profile_id 3 delete access_id ${port}", // Удаляем порт абонента "config vlan vlanid ${vid} delete ${port}" }; for( UserPortStatus port : ports ) { log.debug("port.ipAddr=" + port.ipAddr); String ipaddress = port.ipAddr; // проверка принадлежности порта к vlan Pattern p = Pattern.compile("^193.*"); Matcher m = p.matcher( ipaddress ); Pattern p2 = Pattern.compile("^176.*"); Matcher m2 = p2.matcher( ipaddress ); if (m.find() || m2.find()) { vid = vidwan; } else { vid = vidlan; } log.debug("vid=" + vid); // ----------------------- HEX CONVERT ------------------------ StringTokenizer st=new StringTokenizer(ipaddress,"."); String o1,o2,o3,o4 = ""; String hex1, hex2 = ""; if( st.countTokens()==4 ) { while( st.hasMoreTokens() ) { o1 = st.nextToken(); o2 = st.nextToken(); o3 = st.nextToken(); o4 = st.nextToken(); } i = Integer.parseInt(o1); j = Integer.parseInt(o2); k = Integer.parseInt(o3); l = Integer.parseInt(o4); o1 = Integer.toHexString(0x100 | i).substring(1); o2 = Integer.toHexString(0x100 | j).substring(1); o3 = Integer.toHexString(0x100 | k).substring(1); o4 = Integer.toHexString(0x100 | l).substring(1); hex1 = o1+o2; hex2 = o3+o4; print("hex ip=" + hex1 + " " + hex2); } // ------------------------------------------------------------ log.debug("status=" + port.status.status); log.debug("-------------------"); log.debug("is opened="+IPNContractStatus.STATUS_OPEN); log.debug("is closed="+IPNContractStatus.STATUS_CLOSED); log.debug("is removed="+IPNContractStatus.STATUS_REMOVED); log.debug("-------------------"); // удаляюшие правила if ( port.status.status == IPNContractStatus.STATUS_REMOVED ) { log.debug("-----------------REMOVE RULES -----------------"); for (String rule : closeRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } else if ( port.status.status == IPNContractStatus.STATUS_OPEN ) { log.debug("-----------------OPEN RULES -----------------"); // очищаем порт (на всякий случай) из LAN for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vidlan, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } // очищаем порт (на всякий случай) из WAN for (String rule : deleteRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vidwan, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } // открывающие правила for (String rule : openRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } else //close { log.debug("-----------------CLOSE RULES BY DEFAUL -----------------"); for (String rule : closeRules) { rule = setValues( rule, port.port, port.ipAddr, openAddress, vid, hex1, hex2 ); log.debug("rule=" + rule); result.append( session.doCommand( rule ) ); } } } } private String setValues( String rule, int port, String ip, String openAddress, int vid, String hex1, hex2 ) { rule = rule.replaceAll( "\\$\\{port\\}", String.valueOf( port ) ); rule = rule.replaceAll( "\\$\\{ip\\}" , ip ); rule = rule.replaceAll( "\\$\\{openAdress\\}", openAddress ); rule = rule.replaceAll( "\\$\\{vid\\}", String.valueOf( vid ) ); rule = rule.replaceAll( "\\$\\{hex1\\}" , hex1 ); rule = rule.replaceAll( "\\$\\{hex2\\}" , hex2 ); 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.parseInt( 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; } |
Автор: | crez [ 27 янв 2014, 16:54 ] |
Заголовок сообщения: | Re: Управление коммутатором DLink-3200-C1 (BGB 5.1->6.0) |
Едем дальше с доработкой скрипта. Тестируем модуль ТВ, в результате понадобилось вставить в скрипт строчки, добавляющие в комментарий порта № договора абонента. В добавляющие и удаляющие правила добавил соответственно: Код: // Добавляем к порту комментарий с № договора "config ports ${port} description ${desc}" // Удаляем комментарий с порта "config ports ${port} clear_description" Осталось дело за малым - получить переменную desc. А вот с этим я и сломал голову ![]() Помогите получить getContractTitle. В какое место скрипта его вставить и как. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |