forum.bitel.ru http://forum.bitel.ru/ |
|
Связка Cisco2(BeanShell)+Zyxel(BeanShell) http://forum.bitel.ru/viewtopic.php?f=7&t=3779 |
Страница 1 из 1 |
Автор: | mrustik [ 31 мар 2010, 11:24 ] |
Заголовок сообщения: | Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
В данной связке доступ к параметрам шлюза Cisco2 с шлюза Zyxel получить можно, а вот наоборот, доступ к параметрам Zyxel с шлюза Cisco2 возможно ли получить ? |
Автор: | stark [ 02 апр 2010, 17:26 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
ну база доступна , можно получить все ..Только зачем ? ..и каких параметрах идет речь? |
Автор: | mrustik [ 05 апр 2010, 08:04 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Есть параметры, которые необходимы для работы связки, их нужно прописать в сиске, но они специфичны для зухеля. Сейчас прописываю в договоре, что не совсем удобно. Для того, чтобы получить из базы, нужно знать в шлюзе сиска знать id шлюза зухель. Как хотябы его получить? |
Автор: | stark [ 05 апр 2010, 19:50 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
можно попробоовть реализовать метод parentSync у cisco. Туда передается child , у него есть id. Только в этом случае нужно будет вручную вызывать в это методе синхронизацию с dhcp шлюзом (если он есть). |
Автор: | mrustik [ 06 апр 2010, 10:44 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Синхронизация с шлюзом DHCP у меня происходит в шлюзе Zyxel. В шлюзе Cisco правится конфиг Cisco. |
Автор: | stark [ 07 апр 2010, 17:26 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
mrustik писал(а): Синхронизация с шлюзом DHCP у меня происходит в шлюзе Zyxel. В шлюзе Cisco правится конфиг Cisco. покажите что у вас есть и что хотите получить |
Автор: | mrustik [ 08 апр 2010, 10:00 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Скрипт Cisco2 Код: //-------------Конфигурация шлюза------------------------------------------------------------------------- #имя пользователя login=mrust #пароль шлюза который задаётся для enable cfg.pswd=DVfqSbl #диапазон выделения vlan range=1100-1900 #время ожидания ответа, по истечению которого, шлюз сбрасывает соединение и выдаёт ошибку timeout=2000 #код Vlan параметра договора vlanId=1 #код DHCP Relay параметра договора relayId=2 //-------------Конфигурация шлюза------------------------------------------------------------------------- //-------------Конфигурация типа шлюза--------------------------------------------------------- user_rule.editor.class=bitel.billing.module.services.ipn.editor.vlan.CiscoVlanContactRuleEditor #gate_manager.class=bitel.billing.server.ipn.vlan.CiscoVlanGateWorker #gate_manager.class=bitel.billing.server.ipn.DHCPGateWorker gate_manager.class=bitel.billing.server.ipn.vlan.CiscoVlanParentGateWorker use.script=1 #диапазон выделения vlan range=1100-1900 //-------------Конфигурация типа шлюза--------------------------------------------------------- //-------------Команды------------------------------------------------------------------------- [DEFAULT] [REMOVE] <LOOP> no ip route {A} 255.255.255.255 Vlan{VID} </LOOP> [/REMOVE] [OPEN] <LOOP> ip route {A} 255.255.255.255 Vlan{VID} ip route {DHCP_Relay} 255.255.255.255 Vlan{VID} </LOOP> [/OPEN] [CLOSE] <LOOP> no ip route {A} 255.255.255.255 Vlan{VID} </LOOP> [/CLOSE] [/DEFAULT] //-------------Команды------------------------------------------------------------------------- //-------------Скрипт-------------------------------------------------------------------------- import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.StringTokenizer; import java.util.Map.Entry; import java.sql.*; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.Socket; import org.apache.xml.serializer.ToXMLStream; import org.xml.sax.SAXException; import bitel.billing.common.module.ipn.IPNContractStatus; import bitel.billing.server.ipn.GateWorker; 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.bean.GateType; import bitel.billing.server.ipn.bean.RuleType; import bitel.billing.server.ipn.bean.VlanManager; import bitel.billing.server.ipn.bean.Gate; import bitel.billing.server.util.DefaultServerSetup; import bitel.billing.server.util.Utils; import bitel.billing.server.util.telnet.TelnetSession; import ru.bitel.bgbilling.common.DefaultSetup; import bitel.billing.common.IPUtils; import ru.bitel.bgbilling.common.DefaultSetup; import bitel.billing.common.module.ipn.IPNContractStatus; import bitel.billing.server.ipn.dlink.UserPortStatus; import bitel.billing.server.ipn.dlink.UserPortStatus.UserPortStatusParser; protected void doSync() { try { log.info( "start of cisco........................................................"); host = gate.getHost(); port = gate.getPort(); DefaultServerSetup gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" ); pswdLogin = gate.getKeyword(); login = gateSetup.getStringValue( "login"); pswdCfg = gateSetup.getStringValue( "cfg.pswd"); timeout = gateSetup.getIntValue( "timeout", 0 ); vlanId = gateSetup.getIntValue( "vlanId",0); relayId = gateSetup.getIntValue( "relayId",0); result = new StringBuffer(); if( log.isDebugEnabled() ) { log.debug( gate.getId() + " gate: " + host + ":" + port + " pswdLogin: " + pswdLogin + " pswdCfg: " + pswdCfg ); } session = new TelnetSession( host, port); session.setTimeout( timeout ); session.setLoginPromptSequence( ":" ); session.connect(); result.append( session.doCommand( login ) ); session.setLoginPromptSequence( ">" ); result.append( session.doCommand( pswdLogin ) ); result.append( session.doCommand( "terminal length 0" ) ); result.append( session.doCommand( "terminal width 0" ) ); session.setLoginPromptSequence( ":" ); result.append( session.doCommand( "enable" ) ); session.setLoginPromptSequence( "#" ); result.append( session.doCommand( pswdCfg ) ); result.append( session.doCommand( "configure terminal" ) ); // log.debug( "execute commands" ); // log.info( "------1------"); log.info( "relayId = " + relayId); doCommands( session, result, vlanId, relayId); result.append( session.doCommand( "exit" ) ); session.doCommandAsync( "exit" ); /* log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); log.info( result ); log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); log.debug( "ok" ); */ } catch (Exception e) { throw new RuntimeException ( e ); } log.info( "end of cisco........................................................"); } protected void add() { } private void doCommands( TelnetSession session, StringBuffer result, vlanId, relayId) throws IOException { for( UserStatus status : statusList ) { gateId = gate.getId(); // log.info("gateId=" + gateId); // log.info("vlanId=" + vlanId); // log.info("contractId=" + status.contractId); int vid = getVlan( status.contractId, vlanId ); Relay = getRelay( status.contractId, relayId ); // log.info("vid=" + vid); //TODO - подумать что сделать справилами на добавление rules = null; if (status.status == IPNContractStatus.STATUS_OPEN) { rules = getOpenRules( status, vid, Relay); } // else if (status.status == IPNContractStatus.STATUS_REMOVED) // { // rules = getRemoveRules( status, vid ); // } //if closed and etc else { rules = getCloseRules( status, vid, Relay ); } if (vid > 0) { for ( String rule : rules ) { // log.info("rule=" + rule); result.append( session.doCommand( rule ) ); } } } } getOpenRules( status, vid, Relay ) { return getRules( status, "\\[OPEN\\](.*)\\[/OPEN\\]", vid, Relay ); } getCloseRules( status, vid, Relay ) { return getRules( status, "\\[CLOSE\\](.*)\\[/CLOSE\\]", vid, Relay ); } getRemoveRules( UserStatus status, int vid, Relay ) { return getRules( status, "\\[REMOVE\\](.*)\\[/REMOVE\\]", vid, Relay ); } getRules( status, template, vid, Relay ) { // пользовательское правило, без типа - то все оставляем как есть rule = status.rule.getRuleText(); // log.info("1rule=" + rule); //порты идут до #, а адреса идут после String [] parts = rule.split( "#" ); portsStr = ""; addresesStr = ""; if ( parts.length > 0 ) { portsStr = parts[0]; } if ( parts.length > 1 ) { addresesStr = parts[1]; } //типизированное правило if( status.ruleType != null ) { rule = generateRule( addresesStr, status.gateType, status.ruleType, vid, Relay ); } // log.info("2rule=" + rule); pattern = Pattern.compile( template, Pattern.DOTALL ); m = pattern.matcher( rule ); if (m.find()) { rule = m.group( 1 ); } rule.replaceAll( "\r", "" ); parts = rule.split( "\n" ); result = new ArrayList(); for ( String part : parts ) { if ( !Utils.isEmptyString( part )) { result.add( part ); } } return result; } generateRule( addresses, gateType, ruleType, vid, Relay ) { ruleText = ManadUtils.getRule( gateType, ruleType ); replacements = new HashMap (); if (Relay != null || Relay.length()>0 ) { replacements.put( "\\{DHCP_Relay\\}", Relay ); } if ( vid > 0) { replacements.put( "\\{VID\\}", String.valueOf( vid ) ); } return ManadUtils.generateRule( ruleText, addresses, replacements, ruleType ); } getVlan( cid , pid ) { // log.info("--------------2----------"); int result = 1102; String query = "select val from contract_parameter_type_1 where cid=" + cid + " and pid= " + pid; // log.info(query); PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); rs.first(); // log.info("Row = "+rs.getRow()); if ( rs. isFirst() ) { // log.info("---- First ------"); result = rs.getInt(1); } // log.info("Vlan = "+result); return result; } getRelay( cid , pid ) { log.info("pid = " + pid); result = ""; String query = "select val from contract_parameter_type_1 where cid=" + cid + " and pid= " + pid; log.info(query); PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); rs.first(); log.info("Row = "+rs.getRow()); if ( rs. isFirst() ) { // log.info("---- First ------"); result = rs.getString(1); } log.info("Relay = "+result); return result; } //-------------Скрипт-------------------------------------------------------------------------- Функции getRelay( cid , pid ) и getVlan( cid , pid ) получают из параметров договора Vlan клиента и ip адрес релея. Для всех клиентов одного свича эти параметры одинаковые, можно их прописать при добавлении шлюза и забыть, но сейчас при добавлении договора, оператор должен знать для каждого свича эти параметры, что не удобно и не правильно. Также эти параметры нужны и в шлюзе Zyxel, в нем они получаются такими же функциями. Параметры, общие для всех свичей, подключенных к одному шлюзу Cisco2, легко получаются из параметров шлюза Cisco2. |
Автор: | stark [ 09 апр 2010, 13:37 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
у вас dhcp есть выше cisco ? Если нет, то можете использовать doParentSync в cisco2 место doSync Код: void parentSync( child, childWorker) { log.info( "test - parentSync " ); log.info( "gate.Host = " + gate.getHost() ); log.info( "child.Host = " + child.getHost() ); log.info( "test parentSync - ok" ); } в этом случае вам нужен child.getConfig() Если же есть dhcp, то сложнее |
Автор: | mrustik [ 09 апр 2010, 18:16 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Спасибо, попробую. Выше DHCP нет, DHCP интегрирован в шлюз Zyxel. |
Автор: | mrustik [ 13 апр 2010, 17:06 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Попробовал использовать ParentSync в cisco2 место doSync, но строка ruleText = ManadUtils.getRule( gateType, ruleType ); возвращает команды свича , а не сиски. Может нужно как то по другому вызвать эту строку, или же вызвать ParentSync, считать параметры, но как их передать в doSync? |
Автор: | stark [ 13 апр 2010, 19:42 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
mrustik писал(а): Попробовал использовать ParentSync в cisco2 место doSync, но строка ruleText = ManadUtils.getRule( gateType, ruleType ); возвращает команды свича , а не сиски. Может нужно как то по другому вызвать эту строку, или же вызвать ParentSync, считать параметры, но как их передать в doSync? я запутался .. там вам нужно вызвать команды на обоих шлюзах или только на одном ? ..Логично что шлюза cisco вызывает команды на cisco, а шлюз zyxel на шлюзе zyxel. а что вы хотите ? Насколько я понял вам нужен было получить доступ из cisoc к конфигу шлюза zyxel - показал как . Теперь вам нужны и команды от zyxel? Ну тогда - замените Код: ManadUtils.getRule( gateType, ruleType ); на Код: ManadUtils.getRule( child.getGateType(), ruleType ); только я не понимаю зачем |
Автор: | mrustik [ 15 апр 2010, 16:31 ] |
Заголовок сообщения: | Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell) |
Вы поняли правильно. Нужно с шлюза cisco получить доступ только к конфигу шлюза zyxel, но получилось, что и команды шлюза cisco заменяются тоже на команды zyxel, что не нужно. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |