BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Ошибки в dhcp.out (BGDHCP_IPN_4.5_71)
СообщениеДобавлено: 10 дек 2008, 17:50 
Не в сети

Зарегистрирован: 10 дек 2008, 17:32
Сообщения: 5
Карма: 0
Вот такие ошибки лезут в dhcp.out:
Код:
java.nio.BufferUnderflowException                                                           
        at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:221)                         
        at java.nio.ByteBuffer.get(ByteBuffer.java:675)                                     
        at bitel.billing.server.ext.dhcp.DHCPPacket.getDHCPPacket(DHCPPacket.java:403)     
        at bitel.billing.server.ext.dhcp.DHCPSocketListener.run(DHCPSocketListener.java:185)


dhcp.properties:
Код:
processor.class=bitel.billing.server.ext.dhcp.DHCPRelayProcessor
dhcp.82.key.position=3                                         
                                                               
admin.port=1868                                                 
                                                               
dhcp.thread.count=10                                           
                                                               
dhcp.data.save.delay=3600                                       
dhcp.data.save.period=3600                                     
                                                               
dhcp.server.identifier=172.18.1.24                             


dhcp.data
Код:
<?xml version="1.0" encoding="UTF-8"?>
<sync>
 <gate id="3" host="172.18.1.221">
  <param id="dhcp.dns" value="192.168.1.4"/>
  <param id="dhcp.subnetMask" value="255.255.0.0"/>
  <param id="dhcp.timeOffset" value="-18000"/>
  <param id="dhcp.router" value="192.168.1.4"/>
 </gate>
 <port gateId="3" id="1" ip="AC 10 0B 16"/>
</sync>                                                                   


при этом приходит запросный пакет:
Код:
opt82: 0f 01 0d 00 01 01 93 45 53 2d 32 31 30 38 2d 47


в логах dhcp.log
Код:
INFO   10.12.2008 23:27:37,613 main dhcp.server.identifier=172.18.1.24                       
INFO   10.12.2008 23:27:37,617 main Starting BGDhcpIPN (BGBilling DHCP server/gate for IPN)...
INFO   10.12.2008 23:27:37,626 main dhcp.data.save.delay=3600000                             
INFO   10.12.2008 23:27:37,627 main dhcp.data.save.period=3600000                             
INFO   10.12.2008 23:27:37,628 main Load data from file.                                     
DEBUG  10.12.2008 23:27:37,951 main set gate 3 172.18.1.221                                   
INFO   10.12.2008 23:27:37,955 main setGatePortIp:  gateId =   3;port=1;adress=172.16.11.22   
INFO   10.12.2008 23:27:37,956 main Processor init ok.                                       
INFO   10.12.2008 23:27:37,970 main DHCPSocketListener on port=67 init ok.                   
INFO   10.12.2008 23:27:37,980 main AdminSocketListener on port=1868 init ok.                 
INFO   10.12.2008 23:27:37,980 Thread-5 AdminSocketListener listen.                           
DEBUG  10.12.2008 23:27:42,527 pool-1-thread-1 processing request                             
DEBUG  10.12.2008 23:27:42,528 pool-1-thread-1 OP_BOOT_REQUEST                               
DEBUG  10.12.2008 23:27:42,528 pool-1-thread-1 agent information is not found                 
DEBUG  10.12.2008 23:27:42,528 pool-1-thread-1 trying to renew ip                             
DEBUG  10.12.2008 23:27:45,886 pool-1-thread-1 processing request                             


Что сделать, чтобы dhcp выдал ip. Пока речь идет только о dhcp, без синхронизации шлюзов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 дек 2008, 21:25 
Не в сети
Разработчик
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 дек 2008, 02:43 
Не в сети

Зарегистрирован: 10 дек 2008, 17:32
Сообщения: 5
Карма: 0
Железка Zyxel ES-2108-G Firmware V3.80(ABL.0) | 06/18/2007

Вот пакет на который лезут ошибки:
Код:
Frame 1 (362 bytes on wire, 362 bytes captured)
    Arrival Time: Dec 12, 2008 08:22:08.439144000
    Time delta from previous packet: 0.000000000 seconds
    Time since reference or first frame: 0.000000000 seconds
    Frame Number: 1
    Packet Length: 362 bytes
    Capture Length: 362 bytes
    Protocols in frame: eth:ip:udp:bootp
    Coloring Rule Name: UDP
    Coloring Rule String: udp
Ethernet II, Src: 00:19:cb:45:00:ae (00:19:cb:45:00:ae), Dst: Intel_67:12:00 (00:0e:0c:67:12:00)
    Destination: Intel_67:12:00 (00:0e:0c:67:12:00)
        Address: Intel_67:12:00 (00:0e:0c:67:12:00)
        .... ...0 .... .... .... .... = Multicast: This is a UNICAST frame
        .... ..0. .... .... .... .... = Locally Administrated Address: This is a FACTORY DEFAULT address
    Source: 00:19:cb:45:00:ae (00:19:cb:45:00:ae)
        Address: 00:19:cb:45:00:ae (00:19:cb:45:00:ae)
        .... ...0 .... .... .... .... = Multicast: This is a UNICAST frame
        .... ..0. .... .... .... .... = Locally Administrated Address: This is a FACTORY DEFAULT address
    Type: IP (0x0800)
Internet Protocol, Src: 172.18.1.221 (172.18.1.221), Dst: 172.18.1.24 (172.18.1.24)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 348
    Identification: 0x32e6 (13030)
    Flags: 0x00
        0... = Reserved bit: Not set
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: UDP (0x11)
    Header checksum: 0x2c91 [correct]
        Good: True
        Bad : False
    Source: 172.18.1.221 (172.18.1.221)
    Destination: 172.18.1.24 (172.18.1.24)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
    Source port: bootpc (68)
    Destination port: bootps (67)
    Length: 328
    Checksum: 0x050f [correct]
Bootstrap Protocol
    Message type: Boot Request (1)
    Hardware type: Ethernet
    Hardware address length: 6
    Hops: 1
    Transaction ID: 0x48060424
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0 (0.0.0.0)
    Your (client) IP address: 0.0.0.0 (0.0.0.0)
    Next server IP address: 0.0.0.0 (0.0.0.0)
    Relay agent IP address: 172.18.1.221 (172.18.1.221)
    Client MAC address: 00:18:e7:08:d0:31 (00:18:e7:08:d0:31)
    Server host name not given
    Boot file name not given
    Magic cookie: (OK)
    Option 53: DHCP Message Type = DHCP Request
    Option 61: Client identifier
        Hardware type: Ethernet
        Client MAC address: 00:18:e7:08:d0:31 (00:18:e7:08:d0:31)
    Option 12: Host Name = "akula"
    Option 60: Vendor class identifier = "MSFT 5.0"
    Option 55: Parameter Request List
        1 = Subnet Mask
        15 = Domain Name
        3 = Router
        6 = Domain Name Server
        44 = NetBIOS over TCP/IP Name Server
        46 = NetBIOS over TCP/IP Node Type
        47 = NetBIOS over TCP/IP Scope
        31 = Perform Router Discover
        33 = Static Route
        249 = Classless static routes
        43 = Vendor-Specific Information
    Option 82: Agent Information Option (18 bytes)
        Agent Circuit ID: 000101933137322E31382E312E323231
    End Option
    Padding

0000  00 0e 0c 67 12 00 00 19 cb 45 00 ae 08 00 45 00   ...g.....E....E.
0010  01 5c 32 e6 00 00 ff 11 2c 91 ac 12 01 dd ac 12   .\2.....,.......
0020  01 18 00 44 00 43 01 48 05 0f 01 01 06 01 48 06   ...D.C.H......H.
0030  04 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00   .$..............
0040  00 00 ac 12 01 dd 00 18 e7 08 d0 31 00 00 00 00   ...........1....
0050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00f0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0110  00 00 00 00 00 00 63 82 53 63 35 01 03 3d 07 01   ......c.Sc5..=..
0120  00 18 e7 08 d0 31 0c 05 61 6b 75 6c 61 3c 08 4d   .....1..akula<.M
0130  53 46 54 20 35 2e 30 37 0b 01 0f 03 06 2c 2e 2f   SFT 5.07.....,./
0140  1f 21 f9 2b 52 12 01 10 00 01 01 93 31 37 32 2e   .!.+R.......172.
0150  31 38 2e 31 2e 32 32 31 ff 00 00 00 00 00 00 00   18.1.221........
0160  00 00 00 00 00 00 00 00 00 00                     ..........


С данным пакетом, ошибки идут только в dhcp.out. В dhcp.log при этом записей о поступившем пакете нет. Хотя прошлый раз, в dhcp.log были сообщение о поступившем пакете, но не найденом "agent information".

Это описание option82 с сайта zyxel.ru:
Код:
1-й байт: код субопции (равен 1 для Agent Circuit ID);
2-й байт: длина субопции в байтах;
3-й байт: в DSLAM это номер линейной карты, в коммутаторах всегда равен нулю;
4-й байт: номер порта, к которому подключен DHCP-клиент;
5-6 байты: VLAN ID клиента (в котором был послан исходный DHCP-запрос).
Всё остальное: текст, который можно задать в настройках коммутатора.


Пользователь подключен к 1-му порту коммутатора, 403 vlan.

Я пока временно выкрутился, набросал свой dhpcd... но хотелось-бы все-таки стандартный рабочий.

Еще вопрос - можно-ли подменить своим скриптом user_rule.editor.class?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 дек 2008, 21:55 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
ясно..проблема похоже такая . Опишу подробно
по стандарту так
82 N C1 N1 V1 C2 N2 V2...
где 82 - код опции (это 10-чное написание)
N - длина всей опции
С1 - код первой субопции(1 байт)
N1 - длина первой субопции(1 байт)
V1 - значение первой субопции(N1 байт)
С2 - код второй субопции(1 байт)
и т.д.

Формат субопции внутри поле V1 - зависит от производителя и там может хранится что угодно.
Так получилось, что изначально dhcp работал только с dlink , а dlink бьет каждую из V на еще на части со своими кодами . как бы СубСубопции. И мы сделали парсер , который это так интерпретирует . вот формат dlink :
http://www.dlink.ru/technical/faq_hub_switch_72.php


Но потом оказалось что нужно читать vlan из catalyst cisco 4500. Описание вот :
http://www.cisco.com/en/US/docs/switche ... #wp1072635
но в реальной жизни оказалось что приходило нечто совсем другое , и методом пристального взгляда мы поняли что это имет формат схожий с dlink , там тоже были свои субсубопции , только позиция vlan у них была своя . В итоге чуть поменяли парсер и вынесли в конфигурацию просто позицю байта(dhcp.82.key.position). А берем это байт(если vlan, то 2 байта) в этой позиции в первой субсубопции , первой опции всегда. работало для dlink и cisco.

Для zyxel, судя по вашему пакету, это не так . Он не создает субсубопции(их и нет в стандарте).
Теперь чтобы это работало по стандарту надо убрать парсинг субсубопции и вынести в конфиг просто 2 опции : номер субоцппии и номер байта в ней. Но тогда возникнет проблема, что dlink или циска будут тосовать субсубопции местами , тогда работать не будет ..Все это можно кенечно сделать тоже настраиваемым в конфиге, т.е поддержать оба режима . Толко вот добавим мы это наверное в 4.6. Рискнете скачать dhcp от 4.6 и протестировать если мы сейчас это исправим ? . накатывать на 4.5 пока это не хочется, так ошибки могут полезть . Может быть, если это заработает, то пропатчим 4.5 .


Последний раз редактировалось stark 12 дек 2008, 22:53, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 дек 2008, 22:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
DeusInversus писал(а):
Еще вопрос - можно-ли подменить своим скриптом user_rule.editor.class?

Вопрос - что вы хотите ? создать свой собственный редактор?
gate_manager.class, который вы подменяете , это серверный класс, экземпляр которого вызывается при синхронизации со шлюзом. Причем там подменяется только метод doSync, но не подменяется метод взаимодействия со шлюзами-предками, тут можно тоже сделать гибкое решение.
user_rule.editor.class - это клиентский класс , который представляет из себя панельку, наследуемую от swing-кого класса JPanel. Грубо говоря она умеет отображать на себе элементы и посылать запросы на сервер, показывать ответ сервера . Но со стороны сервера для поддержки этой панельки есть еще специальный action, или несколько action-ов, в зависимости от логики панели. допустим action сделать на BeanShell можно.Т.е это будет некоторое действие , которое можно будет взывать из клиента и получать результат. чисто теоретически можно сделать и создание gui с помощью beanshell и поддержать это клиенте биллинга, вопрос нужно ли это ? Плюс еще возможно вы захотите сохранять специфические данные для этого шлюза в специфических таблицах. Вопрос нужно ли нам делать подобную сложность? Может быть нам проще открыть исходники тогда возникнет вопрос с обновлениями, мы не сможем поддерживать отельную копию исходников на каждого клиента, да еще во все добавлять новый функционал . Короче я клоню просто к тому — какой редактор вам нужен? Может просто нам разработать его конкретно для вас и все ? Или сами его разрабатываете и добавляете отдельной jar-кой в исходники. или давайте поймем что вам нужно, может быть это нужно не только вам, и придумаем универсальное решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 13 дек 2008, 08:04 
Не в сети

Зарегистрирован: 10 дек 2008, 17:32
Сообщения: 5
Карма: 0
stark писал(а):
... Толко вот добавим мы это наверное в 4.6. Рискнете скачать dhcp от 4.6 и протестировать если мы сейчас это исправим ? . накатывать на 4.5 пока это не хочется, так ошибки могут полезть . Может быть, если это заработает, то пропатчим 4.5 .

Протестировать могу и сообщить результаты. Однако я чуть дальше пошел и разбор зухелевского option82 для меня все-равно будет не достаточно, поэтому я пока использую свой писаный на perl'е dhcpd.

Цитата:
Вопрос - что вы хотите ? создать свой собственный редактор?
gate_manager.class, который вы подменяете , это серверный класс, экземпляр которого вызывается при синхронизации со шлюзом. Причем там подменяется только метод doSync, но не подменяется метод взаимодействия со шлюзами-предками, тут можно тоже сделать гибкое решение.
user_rule.editor.class - это клиентский класс , который представляет из себя панельку, наследуемую от swing-кого класса JPanel. Грубо говоря она умеет отображать на себе элементы и посылать запросы на сервер, показывать ответ сервера . Но со стороны сервера для поддержки этой панельки есть еще специальный action, или несколько action-ов, в зависимости от логики панели. допустим action сделать на BeanShell можно.Т.е это будет некоторое действие , которое можно будет взывать из клиента и получать результат. чисто теоретически можно сделать и создание gui с помощью beanshell и поддержать это клиенте биллинга, вопрос нужно ли это ? Плюс еще возможно вы захотите сохранять специфические данные для этого шлюза в специфических таблицах. Вопрос нужно ли нам делать подобную сложность? Может быть нам проще открыть исходники тогда возникнет вопрос с обновлениями, мы не сможем поддерживать отельную копию исходников на каждого клиента, да еще во все добавлять новый функционал . Короче я клоню просто к тому — какой редактор вам нужен? Может просто нам разработать его конкретно для вас и все ? Или сами его разрабатываете и добавляете отдельной jar-кой в исходники. или давайте поймем что вам нужно, может быть это нужно не только вам, и придумаем универсальное решение.

Пришлось разобраться и с Action'ами и описаниями шлюзов чтобы понять как происходит синхронизация зависимых шлюзов.
Чтобы было понятно зачем все это - мне нужно выдавать vlan на коммутатор, а юзеров авторизовать по номеру порта и mac'у, причем конфигурировать центральный свич cisco2 мне не нужно, хотя он физически в схеме сети присутствует. Возможно эту задачу можно решить стандартно, но я не разобрался как ((
После перебора всех возможных типов шлюзов и самих шлюзов (gate_manager.class, user_rule.editor.class), понял что "прямо" мою схему не реализовать.
Единственный подходящий мне user_rule.editor где есть привязка с порту и mac'у это bitel.billing.server.ipn.vlan.CiscoVlanGateWorker. Такая-же привязка есть и в bitel.billing.server.ipn.vlan.CiscoSSHSwitchGateWorker, но если использовать его, то необходимо использовать связку DHCP+Cisco2+Zyxel, только в этом случае DHCP будет синхронизироваться. При использовании bitel.billing.server.ipn.vlan.CiscoVlanGateWorker я делаю связку DHCP+Zyxel, при этом в редакторе я получаю то что мне нужно - ip, mac, port, vlan и синхронизацию DHCP. Лишнее при этом только вкладка CISCO, но она вообщем-то не мешает.
Далее столкнулся с проблемой, что при синхронизации шлюза DHCP, в dhcpd отсылается в параметре id номер vlan'а и нигде нет номера порта. Первая мысль - использовать свой скрипт в типе шлюза DHCP через use.script=1 и описать свой doSync().
Не вышло )))
В DHCPGateWorker мне нужно изменить parentSync, в котором содержится код по формированию XML'а для передачи в dhcpd. Ну выход нашел только один - написать свой myDHCPGateWorker, всунуть его в ipn.jar и указать в качестве gate_manager.class для типа шлюза DHCP.
Это помогло. В итоге получил достаточно гибкую для меня систему - авторизация юзера может выполняться по любым комбинациям из vlan, port, mac, либо возможно отсутствие одного из эти параметров (это реализовано в моем perl'ом dhcpd). Но вот в редакторе, если не указать номер порта, то и mac удаляется. Это я так понимаю нужно исправлять на стороне клиента.
Мой dhcp в итоге получает следующее:
Код:
<portMac gateId="7" vlan="403" port="1" ip="AC 14 01 01" mac="01 01 01 01 01 01"/>
<portMac gateId="7" vlan="403" port="1" ip="AC 14 01 02" mac="02 02 02 02 02 02"/>
<portMac gateId="7" vlan="403" port="2" ip="AC 14 01 03" mac="03 03 03 03 03 03"/>

И в данном конкретном случае на один порт N1 завязано два IP/MAC - например к порту будут через домашний свитч подключено два компьютера.

Лично я считаю, что если бы подмену того-же parentSync, да и вообще любого метода любого класса (ну или не любого) можно было делать подобно gate_manager.class, то система получила бы огромную гибкость.
Что касается обновлений, то тут конечно забота о совместимости своих кодов с новыми версиями должна ложиться на самого программера, который подменяет своим кодом стандартный.


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

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
В 4.6 кое-что реализовано в этом направлении .
1. DHCP_IPN - теперь работает правильно по RFC. Можете скачать его и попробовать. должен для и для zyxel работаь . там только надо одну настиойку добавить, в документаци пока про это нет.
2. У шлюзов теперь можно подменять метод parentSync - это метод, который вы зывается у предка при синхронизации .


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

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


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

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


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

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