forum.bitel.ru http://forum.bitel.ru/ |
|
Множественная вложенность сервисов http://forum.bitel.ru/viewtopic.php?f=44&t=6894 |
Страница 1 из 1 |
Автор: | borisk [ 24 июн 2012, 19:51 ] |
Заголовок сообщения: | Множественная вложенность сервисов |
Добрый день! Вот решил попробовать реализовать такую схему сервисов: 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 ![]() |
Автор: | Amir [ 26 июн 2012, 13:32 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Так не будет работать, возможна только двойная вложенность (A и B), т.к. необходимо, чтобы порт/vlan были прописаны на сервисе A. |
Автор: | borisk [ 26 июн 2012, 17:35 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Именно порт + vlan? Или достаточно одного из них? Или в принципе такая вложенность невозможна при любых условиях? |
Автор: | Amir [ 26 июн 2012, 17:40 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Сейчас - при любых, т.е. на родительском должны быть устройство + порт и/или vlan, на дочернем - адреса. БОльшие вложенности не планировались, поэтому вряд ли будет работать нормально. |
Автор: | borisk [ 26 июн 2012, 17:49 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Жаль. Тогда остается только снова предложить вам подумать ![]() |
Автор: | Amir [ 26 июн 2012, 17:56 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Ну это будет нормально работать, если в дереве устройств заведено устройство шейпирования, которое является родительским ко всем коммутаторам, которые через него шейпируют. А в договоре просто привязать к коммутатору. Классы ServiceActivator вызываются на всех устройствах, начиная с корневого до исходного. |
Автор: | borisk [ 26 июн 2012, 21:40 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Хмм... подумаю в этом направлении. Может наведете на светлую мысль? Я пока не могу придумать как для всех этих сервисов задавать некий единый (и уникальный в пределах устройства шейпирования) номер шейпера. Причем желательно, чтобы номер генерировался автоматом. |
Автор: | Amir [ 26 июн 2012, 21:46 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
А для чего этот номер шейпера нужен? Вот, например, дерево устройств. Или мы о разном? |
Автор: | borisk [ 27 июн 2012, 09:10 ] |
Заголовок сообщения: | Re: Множественная вложенность сервисов |
Да, дерево у меня выглядит примерно так же. У меня система такая. Есть виртуальный шейпер для юрлиц и виртуальный шейпер для физлиц. У физлиц все просто - 1 ip - 1 сессия, потому на FreeBSD заранее конфигурируются необходимые pipe, куда потом пользователи загоняются через tablearg. С юрлицами сложнее - у них может быть несколько IP и конфигурация pipe может быть произвольной. Я сейчас реализовал на python аналог manad из 5.1, ему сейчас на вход передается SID и конфигурация pipe. Он сам вычисляет номер свободного pipe, запоминает его у себя, конфигурирует и так же через tablearg загоняет ip. Вроде задача решена, но не полностью, как я уже писал - в одном договоре на самом деле могут быть несколько SID, а pipe для всех должен быть один. И вот как эту схему реализовать - пока не придумал. P.S. Пока писал похоже догадался - надо не SID как ключ использовать, а CID. Сейчас прикину ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |