forum.bitel.ru http://forum.bitel.ru/ |
|
Шлюз Cisco2 - определение макро NET,NET_MASK,A http://forum.bitel.ru/viewtopic.php?f=7&t=2552 |
Страница 1 из 1 |
Автор: | mikos [ 07 июл 2009, 14:35 ] |
Заголовок сообщения: | Шлюз Cisco2 - определение макро NET,NET_MASK,A |
Добрый день. Подскажите пожалуйста, как быть? Какой шлюз можно приспособить для такой схемы? Пример того, что прописываем в ядре при подключении и отключении абонента: -- Определеяем DHCP пул Код: ip dhcp pool 104 network 10.120.1.0/30 default-router 10.120.1.1 dns-server 10.0.0.4 lease infinite Создаем VLAN Код: vlan 104 interface Vlan 104 no shutdown ip address 10.120.1.1 ip verify unicast source reachable-via rx allow-default ip route-cache flow ip route-cache policy ip policy route-map NAT Ну может еще в ACL какой положить, ну это уже не проблема. Для отключения и удаления абонента соответственно Код: interface Vlan 104 shutdown Код: no vlan 104
no interface Vlan 104 no ip dhcp pool 104 В итоге что мы можем подставить из параметров в шлюзе Cisco2? 104 - номер вилана {VID} 10.120.1.0/30 - адрес выделенной абоненту подсети {NET_MASK} 10.120.1.1 - адрес шлюза, его взять неоткуда, но он всегда у нас равен первому адресу выделенной подсети Подскажите пожалуйста, можно ли добавить свой макрос для расчета адреса шлюза или еще каким-то образом его подставить? Цитата: Сетка 10.120.1.0/30
Первый адрес сетки 10.120.1.1 Или еще проще - выкусить 10.120.1. , а 1 в конец просто добавить |
Автор: | stark [ 07 июл 2009, 17:23 ] |
Заголовок сообщения: | |
вообще эти мкросы сделан не гибко ..в 5.0 скорее всего поменяем их.. сделаем сделаем отдельно {ip1} {ip2} {MASK} {INVERS_MASK}. и все пока можете либо делать подмену уже на результате, либо менять саму процедуру формирования адреса, т.е использовать вместо ManadUtils аналогичную библитотеку скриптов : http://wiki.bgbilling.ru/index.php/%D0% ... ManadUtils понтяие библотеки скриптов появилось в версии 4.6 |
Автор: | mikos [ 07 июл 2009, 17:29 ] |
Заголовок сообщения: | |
На результате оно будет проще, т.к. посмотрел ссылочку и мне поплохело ![]() Я так понимаю, надо здесь сформировать адрес GW и сделать подмену с помощью replacements.put ? Код: generateRule( addresses, gateType, ruleType, int vid ) { ruleText = ManadUtils.getRule( gateType, ruleType ); replacements = new HashMap (); if ( vid > 0) { replacements.put( "\\{VID\\}", String.valueOf( vid ) ); } return ManadUtils.generateRule( ruleText, addresses, replacements, ruleType ); } Что-то типа Код: generateRule( addresses, gateType, ruleType, int vid )
{ ruleText = ManadUtils.getRule( gateType, ruleType ); replacements = new HashMap (); if ( vid > 0) { replacements.put( "\\{VID\\}", String.valueOf( vid ) ); } gw = "1.1.1.1"; // тут покоцаем сетку до вида gw replacements.put( "\\{GW\\}", String.valueOf( gw ) ); return ManadUtils.generateRule( ruleText, addresses, replacements, ruleType ); } Так? |
Автор: | stark [ 07 июл 2009, 20:43 ] |
Заголовок сообщения: | |
ну, да так примерно.. вот тут есть нечто подобное : http://wiki.bgbilling.ru/index.php/%D0% ... %BC_telnet там с помощью AddressRangeManager считывается первый и последений адресс, и потом подставляются 2 макроса : replacements.put( "\\{addr1\\}", addr1 ); replacements.put( "\\{addr2\\}", addr2 ); |
Автор: | mikos [ 08 июл 2009, 01:21 ] |
Заголовок сообщения: | |
Хм, попробовал, чтобы проверить - и не работает ведь ![]() Код: generateRule( addresses, gateType, ruleType, int vid ) { ruleText = ManadUtils.getRule( gateType, ruleType ); replacements = new HashMap (); if ( vid > 0) { replacements.put( "\\{VID\\}", String.valueOf( vid ) ); } gw = "1.1.1.1"; // тут покоцаем сетку до вида gw replacements.put( "\\{GW\\}", gw ); return ManadUtils.generateRule( ruleText, addresses, replacements, ruleType ); } Код: [OPEN]
ip dhcp pool {VID} <LOOP_NET> network {NET} default-gateway {GW} dns-server 10.0.0.4 lease infinite </LOOP_NET> vlan {VID} interface Vlan {VID} no shutdown ip address {GW} [/OPEN] Везде где {GW} ожидал увидеть 1.1.1.1 но подмена не произошла ![]() Что не так? PS: Может сюда еще добавить {MASK_CIDR} ? Наличие таких макросов было бы просто незаменимым! Цитата: вообще эти мкросы сделан не гибко ..в 5.0 скорее всего поменяем их.. сделаем сделаем отдельно {ip1} {ip2} {MASK} {INVERS_MASK}
|
Автор: | stark [ 08 июл 2009, 10:42 ] |
Заголовок сообщения: | |
у вас реально в командах , которые приходя на шлюз не подменеятся или прсото в командах на вкалдке cisco не отображается ? там и не будет отображаться ..на шлюз должны приходить подмененные команды |
Автор: | stark [ 08 июл 2009, 10:43 ] |
Заголовок сообщения: | |
mikos писал(а): PS: Может сюда еще добавить {MASK_CIDR} ? Наличие таких макросов было бы просто незаменимым! что это ? |
Автор: | mikos [ 08 июл 2009, 12:33 ] |
Заголовок сообщения: | |
stark писал(а): у вас реально в командах , которые приходя на шлюз не подменеятся или прсото в командах на вкалдке cisco не отображается ? там и не будет отображаться ..на шлюз должны приходить подмененные команды
На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет. |
Автор: | mikos [ 08 июл 2009, 12:36 ] |
Заголовок сообщения: | |
stark писал(а): mikos писал(а): PS: Может сюда еще добавить {MASK_CIDR} ? Наличие таких макросов было бы просто незаменимым! что это ? Это маска в формате /32 /30 /29 /28 и тд При чем, лучше без слеша - его можно и ручками добавить, т.к. разное оборудование и версии прошивок по разному хотят расстановки слеша. К примеру Cisco IOS 12.1 не принимает сформированный вами адрес в вормате 1.1.1.1/2 в определении ip dhcp pool, ему там оказывается надо так 1.1.1.1 /2 |
Автор: | stark [ 08 июл 2009, 14:59 ] |
Заголовок сообщения: | |
mikos писал(а): stark писал(а): mikos писал(а): PS: Может сюда еще добавить {MASK_CIDR} ? Наличие таких макросов было бы просто незаменимым! что это ? Это маска в формате /32 /30 /29 /28 и тд При чем, лучше без слеша - его можно и ручками добавить, т.к. разное оборудование и версии прошивок по разному хотят расстановки слеша. К примеру Cisco IOS 12.1 не принимает сформированный вами адрес в вормате 1.1.1.1/2 в определении ip dhcp pool, ему там оказывается надо так 1.1.1.1 /2 ну и это тоже..прсото забыл перечислить . еще надо {INVERT_MASK} для циски |
Автор: | mikos [ 08 июл 2009, 15:15 ] |
Заголовок сообщения: | |
Т.е. это будет только в пятерке? М как быть с подменой? На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет. |
Автор: | stark [ 08 июл 2009, 15:43 ] |
Заголовок сообщения: | |
mikos писал(а): Т.е. это будет только в пятерке?
М как быть с подменой? На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет. работает .. я же говрю {VID} будет отображаться , а все остальрые не будут отображаться , но реально подствится ..То что вы видите на вкледке - это резултат работы action-а , он так же подменяет {VID}, а про {GW} он ничего не знает . ваш код не отрабатыает при показыаании вкалкдки - там вызвает метод стандартного шлюза , а ваш отработает реально при синхронизации . т.е будуите видеть одно, а раельно будет другое |
Автор: | mikos [ 08 июл 2009, 15:52 ] |
Заголовок сообщения: | |
Все, теперь понял, пасиб! А может еще подскажете, как исправить содержимое макроса MASK ? Сейчас оно вида 1.1.1.1/2 и надо отделить пробелом маску от адреса - 1.1.1.1 /2 |
Автор: | mikos [ 09 июл 2009, 20:59 ] |
Заголовок сообщения: | |
А нет ли случайно в API функций для работы с IP адресами? Есть первый адрес диаппазона 1.1.1.0 Нужно взять следующий. Или тут только как со строкой работать - вырезть в конце ноль и добавить 1? |
Автор: | mikos [ 09 июл 2009, 21:19 ] |
Заголовок сообщения: | |
Адрес вытащил Код: gw = IPUtils.convertIpToString( range.getAddr1()+1 );
Подскажите пожалуйста, как маску этого диаппазона вытащить? range.getMask() - это CIDR маска Как вытащить маску в дотед нотации (255.255.255.0) ? |
Автор: | mikos [ 09 июл 2009, 22:36 ] |
Заголовок сообщения: | |
Попробовал так. mask=30 Код: long ffMask = (0xFFFFFFF); ffMask = (ffMask << 8 ) | 0xFF; long maskNew = ( ffMask << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & ffMask; net_mask = IPUtils.convertLongIpToString( maskNew ); log.info("--net_mask=" + net_mask); Но получаю какую-то фигню вида Код: 07-09/20:33:56 INFO [Thread-198] CiscoVlanGateWorker - --mask=30
07-09/20:33:56 INFO [Thread-198] CiscoVlanGateWorker - --net_mask=4095.255.255.252 Что не так? |
Автор: | Jimson [ 09 июл 2009, 22:54 ] |
Заголовок сообщения: | |
ну так выведи ffMask и сразу понятно будет что не так |
Автор: | mikos [ 09 июл 2009, 23:34 ] |
Заголовок сообщения: | |
Чего-то не пойму ![]() Код: 07-09/21:32:49 INFO [Thread-200] CiscoVlanGateWorker - --ffMask=68719476735
07-09/21:32:49 INFO [Thread-200] CiscoVlanGateWorker - --maskNew=68719476732 07-09/21:32:49 INFO [Thread-200] CiscoVlanGateWorker - --net_mask=4095.255.255.252 Jimson, есть идеи? |
Автор: | mikos [ 10 июл 2009, 11:34 ] |
Заголовок сообщения: | |
Ошибку нашел. Код: long ffMask = (0xFFFFFFF); Должно быть Код: long ffMask = (0xFFFFFF); Рабочий вариант Код: long ffMask = (0xFFFFFF);
ffMask = (ffMask << 8 ) | 0xFF; long maskNew = ( ffMask << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & ffMask; net_mask = IPUtils.convertLongIpToString( maskNew ); |
Автор: | Jimson [ 10 июл 2009, 14:37 ] |
Заголовок сообщения: | |
я так понимаю что извращения с ffMask связаны лишь с тем что одновременное использование 'L' и '0x' не работает вместо извращений с битовыми сдвигами проще написать long ffMask = 4294967295L; а можно и вообще без переменной обойтись: long maskNew = ( 4294967295L << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & 4294967295L; |
Автор: | stark [ 10 июл 2009, 14:50 ] |
Заголовок сообщения: | |
в предыдущей версии биботеки bsh не работалао "L" . сейчас работает |
Автор: | Jimson [ 10 июл 2009, 15:30 ] |
Заголовок сообщения: | |
stark писал(а): в предыдущей версии биботеки bsh не работалао "L" . сейчас работает
я так понимаю это относится к десятичной натации числа, с шеснацатиричными не работает и с новой библиотекой, во всяком случае с моим bsh.jar взятым пару недель назад из дистрибутива 4.6 |
Автор: | stark [ 10 июл 2009, 16:13 ] |
Заголовок сообщения: | |
Jimson писал(а): stark писал(а): в предыдущей версии биботеки bsh не работалао "L" . сейчас работает я так понимаю это относится к десятичной натации числа, с шеснацатиричными не работает и с новой библиотекой, во всяком случае с моим bsh.jar взятым пару недель назад из дистрибутива 4.6 а точно ..значит с 16-ными как не работтало так и не работает, вспомнил. Просто я недавно проверил на 10-чных и там работало..оказывается зависит от системы исчисления |
Автор: | mikos [ 10 июл 2009, 17:38 ] |
Заголовок сообщения: | |
Jimson писал(а): я так понимаю что извращения с ffMask связаны лишь с тем что одновременное использование 'L' и '0x' не работает
вместо извращений с битовыми сдвигами проще написать long ffMask = 4294967295L; а можно и вообще без переменной обойтись: long maskNew = ( 4294967295L << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & 4294967295L; Спасибо |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |