forum.bitel.ru http://forum.bitel.ru/ |
|
Ошибки в dhcp.out (BGDHCP_IPN_4.5_71) http://forum.bitel.ru/viewtopic.php?f=7&t=1703 |
Страница 1 из 1 |
Автор: | DeusInversus [ 10 дек 2008, 17:50 ] |
Заголовок сообщения: | Ошибки в dhcp.out (BGDHCP_IPN_4.5_71) |
Вот такие ошибки лезут в 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, без синхронизации шлюзов. |
Автор: | Amir [ 11 дек 2008, 21:25 ] |
Заголовок сообщения: | |
А железка какая? Полностью запросный пакет бы... |
Автор: | DeusInversus [ 12 дек 2008, 02:43 ] |
Заголовок сообщения: | |
Железка 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? |
Автор: | stark [ 12 дек 2008, 21:55 ] |
Заголовок сообщения: | |
ясно..проблема похоже такая . Опишу подробно по стандарту так 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:49 ] |
Заголовок сообщения: | |
DeusInversus писал(а): Еще вопрос - можно-ли подменить своим скриптом user_rule.editor.class?
Вопрос - что вы хотите ? создать свой собственный редактор? gate_manager.class, который вы подменяете , это серверный класс, экземпляр которого вызывается при синхронизации со шлюзом. Причем там подменяется только метод doSync, но не подменяется метод взаимодействия со шлюзами-предками, тут можно тоже сделать гибкое решение. user_rule.editor.class - это клиентский класс , который представляет из себя панельку, наследуемую от swing-кого класса JPanel. Грубо говоря она умеет отображать на себе элементы и посылать запросы на сервер, показывать ответ сервера . Но со стороны сервера для поддержки этой панельки есть еще специальный action, или несколько action-ов, в зависимости от логики панели. допустим action сделать на BeanShell можно.Т.е это будет некоторое действие , которое можно будет взывать из клиента и получать результат. чисто теоретически можно сделать и создание gui с помощью beanshell и поддержать это клиенте биллинга, вопрос нужно ли это ? Плюс еще возможно вы захотите сохранять специфические данные для этого шлюза в специфических таблицах. Вопрос нужно ли нам делать подобную сложность? Может быть нам проще открыть исходники тогда возникнет вопрос с обновлениями, мы не сможем поддерживать отельную копию исходников на каждого клиента, да еще во все добавлять новый функционал . Короче я клоню просто к тому — какой редактор вам нужен? Может просто нам разработать его конкретно для вас и все ? Или сами его разрабатываете и добавляете отдельной jar-кой в исходники. или давайте поймем что вам нужно, может быть это нужно не только вам, и придумаем универсальное решение. |
Автор: | DeusInversus [ 13 дек 2008, 08:04 ] |
Заголовок сообщения: | |
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, то система получила бы огромную гибкость. Что касается обновлений, то тут конечно забота о совместимости своих кодов с новыми версиями должна ложиться на самого программера, который подменяет своим кодом стандартный. |
Автор: | stark [ 20 янв 2009, 13:52 ] |
Заголовок сообщения: | |
В 4.6 кое-что реализовано в этом направлении . 1. DHCP_IPN - теперь работает правильно по RFC. Можете скачать его и попробовать. должен для и для zyxel работаь . там только надо одну настиойку добавить, в документаци пока про это нет. 2. У шлюзов теперь можно подменять метод parentSync - это метод, который вы зывается у предка при синхронизации . |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |