BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 24 июн 2012, 19:51 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Добрый день!

Вот решил попробовать реализовать такую схему сервисов:
A: Сервис "шейпер" (учитывается только устройство на котором шейпируем)
B: Сервис "ресурсы" (учитывается порт и vlan на коммутаторе клиента)
C: Сервис IP (учитывается статически назначенный ip клиенту)

Делаем такую вложенность:
A -> B -> C1, C2, CN

После этого в serviceModify пытаюсь следующим кодом добраться до C1..Cn
Код:
      if(service.getTypeId() == LL_SHAPER_SID) {
         logger.error("Service: " + service.getId() + " iface: " + service.getInterfaceTitle() + " vlan: " + service.getVlan());
         List<InetServ> shaperChildren = service.getChildren();
         Iterator<InetServ> shaperIterator = shaperChildren.iterator();
         while(shaperIterator.hasNext()) {
            InetServ    shaperService = shaperIterator.next();
            logger.info("has shaperService ID: " + shaperService.getId());
            if(shaperService.getTypeId() == LL_RESOURCE_SID) {
               List<InetServ> resourceChildren = shaperService.getChildren();
               if(resourceChildren == null)
                  logger.info("resourceChildren is null: ");
               Iterator<InetServ> resourceIterator = resourceChildren.iterator();
               while(resourceIterator.hasNext()) {
                  InetServ   ipService = resourceIterator.next();

                  logger.info("has ipService ID: " + ipService.getId());
                  iplist.append( SPACE );
                  iplist.append( IpNet.toString(ipService.getAddressFrom(), IpNet.getMask(ipService.getAddressFrom(), ipService.getAddressTo())) );
               }
            }
         }

      }


так вот resourceChildren всегда null :( Если вложенность сервисов одинарная, то есть A убираем, и только B и C используем, то все замечательно работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 13:32 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Так не будет работать, возможна только двойная вложенность (A и B), т.к. необходимо, чтобы порт/vlan были прописаны на сервисе A.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 17:35 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Именно порт + vlan? Или достаточно одного из них? Или в принципе такая вложенность невозможна при любых условиях?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 17:40 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Сейчас - при любых, т.е. на родительском должны быть устройство + порт и/или vlan, на дочернем - адреса.
БОльшие вложенности не планировались, поэтому вряд ли будет работать нормально.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 17:49 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Жаль. Тогда остается только снова предложить вам подумать :) Область применения следующая: у провайдера большая распределенная сеть L3. Клиент имеет несколько точек подключения на разных маршрутизаторах. VLAN точек тоже разные. А вот точка шейпирования - одна.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 17:56 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Ну это будет нормально работать, если в дереве устройств заведено устройство шейпирования, которое является родительским ко всем коммутаторам, которые через него шейпируют. А в договоре просто привязать к коммутатору.
Классы ServiceActivator вызываются на всех устройствах, начиная с корневого до исходного.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 21:40 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Хмм... подумаю в этом направлении. Может наведете на светлую мысль? Я пока не могу придумать как для всех этих сервисов задавать некий единый (и уникальный в пределах устройства шейпирования) номер шейпера. Причем желательно, чтобы номер генерировался автоматом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 июн 2012, 21:46 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
А для чего этот номер шейпера нужен? Вот, например, дерево устройств.
Или мы о разном?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 июн 2012, 09:10 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Да, дерево у меня выглядит примерно так же. У меня система такая. Есть виртуальный шейпер для юрлиц и виртуальный шейпер для физлиц. У физлиц все просто - 1 ip - 1 сессия, потому на FreeBSD заранее конфигурируются необходимые pipe, куда потом пользователи загоняются через tablearg. С юрлицами сложнее - у них может быть несколько IP и конфигурация pipe может быть произвольной. Я сейчас реализовал на python аналог manad из 5.1, ему сейчас на вход передается SID и конфигурация pipe. Он сам вычисляет номер свободного pipe, запоминает его у себя, конфигурирует и так же через tablearg загоняет ip. Вроде задача решена, но не полностью, как я уже писал - в одном договоре на самом деле могут быть несколько SID, а pipe для всех должен быть один. И вот как эту схему реализовать - пока не придумал.

P.S. Пока писал похоже догадался - надо не SID как ключ использовать, а CID. Сейчас прикину :)


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

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


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

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


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

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