BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 01 июн 2024, 17:12

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 12 апр 2013, 13:13 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Добрый день.

bgbilling 5.1
В модуле ipn имеется cкриптовый шлюз D-link (интернет IPoE работает как надо).
Появилась задача подключать клиентам iptv (мультикаст, все каналы в одном пакете).
Варианты у меня такие:
1. добавить в этом же модуле ipn новую услугу iptv, и при открытии шлюза, на коммутаторе в igmp snooping добавлять клиентский порт как member_port, при закрытии удалять его. Вопрос: как в скрипте определить подключена ли у клиента на данный момент услуга iptv или нет?
2. создать второй модуль ipn. Но тогда а в нем нужно будет дублировать все шлюзы, и повторно привязывать клиента к порту коммутатора (как то все это не очень) . Но здесь тоже не пойму что делать, в шлюзе d-link идет привязка ip адреса к порту, но здесь ip уже не нужен, а нужен только порт.

Подскажите, как лучше реализовать задачу?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 апр 2013, 13:37 
Не в сети

Зарегистрирован: 07 ноя 2008, 12:51
Сообщения: 99
Карма: -9
Может быть по аналогии с viewtopic.php?f=19&t=2237


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 апр 2013, 16:46 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
mash55 писал(а):
Может быть по аналогии с viewtopic.php?f=19&t=2237

Не совсем то...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 апр 2013, 16:52 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Господа разработчики, подтолкните на мысль, пожалуйста.
Или напишите где можно глянуть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2013, 13:59 
Не в сети
Разработчик

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2013, 15:45 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Да вот тоже думал туда заносить, но что-то не нашел как в скрипте получить порт со вкладки "Порты".
Скиньте ссылку где можно глянуть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 апр 2013, 18:31 
Не в сети

Зарегистрирован: 27 дек 2011, 07:28
Сообщения: 32
Карма: 0
Сделал!
Вот только не совсем хорошо, что можно поменять номер порта на вкладке Порты не меняя статус шлюза. Т.е можно поменять номер порта, а старый порт на коммутаторе в igmp_snooping не удаляется.

Код:
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.server.ipn.UserStatus;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.server.util.telnet.TelnetSession;

 
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.common.module.ipn.IPNContractStatus;

import bitel.billing.server.contract.bean.*;
import ru.bitel.bgbilling.modules.ipn.server.bean.GatePortManager;


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 [] openRules = new String [] {
        //Для открытого шлюза IPTV разрешаем
        "config igmp_snooping multicast_vlan iptv add member_port ${port}" };
   
    String [] closeRules = new String [] {
      // Закрытый шлюз
        "config igmp_snooping multicast_vlan iptv delete member_port ${port}" };


   for ( UserStatus status : statusList )
    {
        Integer cid = status.contractId;
      int port = -1 ;

      List ports = new GatePortManager( con, mid ).getGatePorts( status.contractId, gate.getId() );
      if ( ports.size() > 0 )
      {   
             port = ports.get(0);
          log.info("cid="+ status.contractId+" port=" + port );
       

           if ( status.status == IPNContractStatus.STATUS_OPEN )
           {
               // Open
                  for (String rule : openRules)
            {
                  rule = setValues( rule, port);
                  log.info("rule=" + rule);
                  result.append(  session.doCommand( rule ) );
            }
           }
           else //close,remove
           {
               for (String rule : closeRules)
            {
                  rule = setValues( rule, port);
                  log.info("rule=" + rule);
                  result.append(  session.doCommand( rule ) );
            }

           } //if,else
      }// if ports.size
    }//for

}//void


private String setValues( String rule,  int port )
{
    rule = rule.replaceAll( "\\$\\{port\\}", String.valueOf( port ) );

    return rule;
}




protected void doParentSync()
{
}



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

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


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

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


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

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