BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 22 июн 2025, 00:36

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 31 мар 2010, 11:24 
В данной связке доступ к параметрам шлюза Cisco2 с шлюза Zyxel получить можно, а вот наоборот,
доступ к параметрам Zyxel с шлюза Cisco2 возможно ли получить ?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 02 апр 2010, 17:26 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
ну база доступна , можно получить все ..Только зачем ? ..и каких параметрах идет речь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 05 апр 2010, 08:04 
Есть параметры, которые необходимы для работы связки, их нужно прописать в сиске, но они специфичны для зухеля. Сейчас прописываю в договоре, что не совсем удобно. Для того, чтобы получить из базы, нужно знать в шлюзе сиска знать id шлюза зухель. Как хотябы его получить?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 05 апр 2010, 19:50 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
можно попробоовть реализовать метод parentSync у cisco. Туда передается child , у него есть id. Только в этом случае нужно будет вручную вызывать в это методе синхронизацию с dhcp шлюзом (если он есть).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 06 апр 2010, 10:44 
Синхронизация с шлюзом DHCP у меня происходит в шлюзе Zyxel. В шлюзе Cisco правится конфиг Cisco.


Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 07 апр 2010, 17:26 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
mrustik писал(а):
Синхронизация с шлюзом DHCP у меня происходит в шлюзе Zyxel. В шлюзе Cisco правится конфиг Cisco.


покажите что у вас есть и что хотите получить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 08 апр 2010, 10:00 
Скрипт 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.


Последний раз редактировалось mrustik 22 апр 2010, 09:35, всего редактировалось 1 раз.

Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 09 апр 2010, 13:37 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
у вас 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, то сложнее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 09 апр 2010, 18:16 
Спасибо, попробую. Выше DHCP нет, DHCP интегрирован в шлюз Zyxel.


Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 13 апр 2010, 17:06 
Попробовал использовать ParentSync в cisco2 место doSync, но строка
ruleText = ManadUtils.getRule( gateType, ruleType );
возвращает команды свича , а не сиски. Может нужно как то по другому вызвать эту строку, или же вызвать ParentSync, считать параметры, но как их передать в doSync?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 13 апр 2010, 19:42 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
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 );


только я не понимаю зачем


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связка Cisco2(BeanShell)+Zyxel(BeanShell)
СообщениеДобавлено: 15 апр 2010, 16:31 
Вы поняли правильно. Нужно с шлюза cisco получить доступ только к конфигу шлюза zyxel, но получилось, что и команды шлюза cisco заменяются тоже на команды zyxel, что не нужно.


Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.042s | 27 Queries | GZIP : On ]