BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 24 ] 
Автор Сообщение
СообщениеДобавлено: 07 июл 2009, 14:35 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Добрый день.
Подскажите пожалуйста, как быть?
Какой шлюз можно приспособить для такой схемы?

Пример того, что прописываем в ядре при подключении и отключении абонента:
--
Определеяем 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 в конец просто добавить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июл 2009, 17:23 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
вообще эти мкросы сделан не гибко ..в 5.0 скорее всего поменяем их.. сделаем сделаем отдельно {ip1} {ip2} {MASK} {INVERS_MASK}. и все

пока можете либо делать подмену уже на результате, либо менять саму процедуру формирования адреса, т.е использовать вместо ManadUtils аналогичную библитотеку скриптов :
http://wiki.bgbilling.ru/index.php/%D0% ... ManadUtils

понтяие библотеки скриптов появилось в версии 4.6


Последний раз редактировалось stark 07 июл 2009, 17:29, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июл 2009, 17:29 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
На результате оно будет проще, т.к. посмотрел ссылочку и мне поплохело :(

Я так понимаю, надо здесь сформировать адрес 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 );      
}


Так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июл 2009, 20:43 
Не в сети
Разработчик

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

http://wiki.bgbilling.ru/index.php/%D0% ... %BC_telnet

там с помощью AddressRangeManager считывается первый и последений адресс, и потом подставляются 2 макроса :
replacements.put( "\\{addr1\\}", addr1 );
replacements.put( "\\{addr2\\}", addr2 );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 01:21 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Хм, попробовал, чтобы проверить - и не работает ведь :(

Код:
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}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 10:42 
Не в сети
Разработчик

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 10:43 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
mikos писал(а):

PS: Может сюда еще добавить {MASK_CIDR} ? Наличие таких макросов было бы просто незаменимым!

что это ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 12:33 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
stark писал(а):
у вас реально в командах , которые приходя на шлюз не подменеятся или прсото в командах на вкалдке cisco не отображается ? там и не будет отображаться ..на шлюз должны приходить подмененные команды

На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 12:36 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 14:59 
Не в сети
Разработчик

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 15:15 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Т.е. это будет только в пятерке?
М как быть с подменой? На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 15:43 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
mikos писал(а):
Т.е. это будет только в пятерке?
М как быть с подменой? На вкладке не отображается, при добавлении шлюза абоненту. {VID} отображается, а {GW} нет.


работает .. я же говрю {VID} будет отображаться , а все остальрые не будут отображаться , но реально подствится ..То что вы видите на вкледке - это резултат работы action-а , он так же подменяет {VID}, а про {GW} он ничего не знает . ваш код не отрабатыает при показыаании вкалкдки - там вызвает метод стандартного шлюза , а ваш отработает реально при синхронизации . т.е будуите видеть одно, а раельно будет другое


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июл 2009, 15:52 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Все, теперь понял, пасиб!

А может еще подскажете, как исправить содержимое макроса MASK ?
Сейчас оно вида 1.1.1.1/2 и надо отделить пробелом маску от адреса - 1.1.1.1 /2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июл 2009, 20:59 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
А нет ли случайно в API функций для работы с IP адресами?
Есть первый адрес диаппазона 1.1.1.0
Нужно взять следующий. Или тут только как со строкой работать - вырезть в конце ноль и добавить 1?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июл 2009, 21:19 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Адрес вытащил

Код:
gw = IPUtils.convertIpToString( range.getAddr1()+1 );


Подскажите пожалуйста, как маску этого диаппазона вытащить?

range.getMask() - это CIDR маска

Как вытащить маску в дотед нотации (255.255.255.0) ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июл 2009, 22:36 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Попробовал так. 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


Что не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июл 2009, 22:54 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
ну так выведи ffMask и сразу понятно будет что не так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июл 2009, 23:34 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Чего-то не пойму :(

Код:
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, есть идеи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 11:34 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Ошибку нашел.

Код:
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 );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 14:37 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
я так понимаю что извращения с ffMask связаны лишь с тем что одновременное использование 'L' и '0x' не работает
вместо извращений с битовыми сдвигами проще написать
long ffMask = 4294967295L;

а можно и вообще без переменной обойтись:
long maskNew = ( 4294967295L << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & 4294967295L;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 14:50 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
в предыдущей версии биботеки bsh не работалао "L" . сейчас работает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 15:30 
Не в сети

Зарегистрирован: 07 май 2008, 13:34
Сообщения: 594
Откуда: Москва
Карма: 27
stark писал(а):
в предыдущей версии биботеки bsh не работалао "L" . сейчас работает

я так понимаю это относится к десятичной натации числа, с шеснацатиричными не работает и с новой библиотекой, во всяком случае с моим bsh.jar взятым пару недель назад из дистрибутива 4.6


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 16:13 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Jimson писал(а):
stark писал(а):
в предыдущей версии биботеки bsh не работалао "L" . сейчас работает

я так понимаю это относится к десятичной натации числа, с шеснацатиричными не работает и с новой библиотекой, во всяком случае с моим bsh.jar взятым пару недель назад из дистрибутива 4.6


а точно ..значит с 16-ными как не работтало так и не работает, вспомнил. Просто я недавно проверил на 10-чных и там работало..оказывается зависит от системы исчисления


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июл 2009, 17:38 
Не в сети
Аватара пользователя

Зарегистрирован: 23 мар 2009, 23:16
Сообщения: 780
Откуда: St.Petersburg
Карма: 0
Jimson писал(а):
я так понимаю что извращения с ffMask связаны лишь с тем что одновременное использование 'L' и '0x' не работает
вместо извращений с битовыми сдвигами проще написать
long ffMask = 4294967295L;

а можно и вообще без переменной обойтись:
long maskNew = ( 4294967295L << ( 32 - Utils.parseIntString( mask, 0 ) ) ) & 4294967295L;

Спасибо


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

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


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

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


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

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