forum.bitel.ru
http://forum.bitel.ru/

DHCP always broadcast
http://forum.bitel.ru/viewtopic.php?f=44&t=6848
Страница 1 из 1

Автор:  Zar1n [ 08 июн 2012, 06:53 ]
Заголовок сообщения:  DHCP always broadcast

Хотелось бы иметь возможность, выставить бродкаст флаг во всех отправляемых дхцп пакетах принудительно.

Аналог опции always-broadcast в isc-dhcp.

- Клиент (Windows XP) отправляет запрос без броадкаст флага, через релей агент (Cisco)
- Сервер отвечает без броадкаст флага, через релей агент клиенту.
- На клиента прилетает offer юникастом, и как следствие игнорируется.

P.S

Код:
 To work around some clients that cannot accept IP unicast datagrams
   before the TCP/IP software is configured as discussed in the previous
   paragraph, DHCP uses the 'flags' field [21].  The leftmost bit is
   defined as the BROADCAST (B) flag.  The semantics of this flag are
   discussed in section 4.1 of this document.  The remaining bits of the
   flags field are reserved for future use.  They MUST be set to zero by
   clients and ignored by servers and relay agents.  Figure 2 gives the
   format of the 'flags' field


http://tools.ietf.org/html/rfc2131#page-8

Автор:  stark [ 08 июн 2012, 13:03 ]
Заголовок сообщения:  Re: DHCP always broadcast

так проблема в клиенте . По стандарту он должен ставить этот флаг , а он не ставит , значит хочет получать unicast-ом .

Автор:  Amir [ 08 июн 2012, 13:10 ]
Заголовок сообщения:  Re: DHCP always broadcast

Можете попробовать в классе - обработчике процессора протокола добавить
Код:
   @Override
   public void postprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
      response.flags |= DhcpPacket.FLAG_BROADCAST;
   }
, скомпилировать и нажать Перечитать конфигурацию на серверах.

Автор:  Zar1n [ 08 июн 2012, 13:14 ]
Заголовок сообщения:  Re: DHCP always broadcast

stark, проблема в винде, разные билды, разные SP, клиентов не заставишь пере устанавливать винду до посинения. На 7ке такой проблемы нет, на висте есть решение в реестре )) когда использовали L2 релей на длинке, флаг ставил коммутатор :) костыль, но работало.

Amir, спасибо, попробую завтра.

Автор:  Amir [ 08 июн 2012, 14:22 ]
Заголовок сообщения:  Re: DHCP always broadcast

У нас, похоже, неправильная константа была FLAG_BROADCAST, было 0x4000, нужно (short)(0x8000 & 0xffff).
Выложили обновление, добавили параметр конфига dhcp.alwaysBroadcast=1, т.е. можно сделать без изменения класса обработчика процессора протокола.
Только не уверены, что это поможет. Проблема только с RENEW запросами? У некоторых так и работает, т.к. на RENEW отвечать не обязательно - просто дожидаемся стадии REBIND, когда уже шлюется броадкастом.
В ipn когда-то устанавливали dhcp.serverIdentifier=0.0.0.0, тогда RENEW шлется также броадкастом, вроде бы работало, но недавно при таком параметре на какой-то системе вылез глюк, что система периодически теряет IP-адрес на секунду-две.

Автор:  Zar1n [ 14 июн 2012, 06:26 ]
Заголовок сообщения:  Re: DHCP always broadcast

Amir писал(а):
Можете попробовать в классе - обработчике процессора протокола добавить
Код:
   @Override
   public void postprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
      response.flags |= DhcpPacket.FLAG_BROADCAST;
   }
, скомпилировать и нажать Перечитать конфигурацию на серверах.



Возможно будет полезно. При попытке манипулировать респонсом. Получаем.


Код:
dhcp 06-14/11:17:57 ERROR [dhcpLstnr-p-11-t-10] InetAbstractDhcpProcessor -
java.lang.NullPointerException
   at ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ISGProtocolHandler.postprocessDhcpRequest(ISGProtocolHandler.java:382)
   at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processRequest(InetAbstractDhcpProcessor.java:68)
   at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processRequest(InetAbstractDhcpProcessor.java:1)
   at ru.bitel.bgbilling.kernel.network.dhcp.DhcpListenerWorker.runImpl(DhcpListenerWorker.java:55)
   at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
   at java.lang.Thread.run(Thread.java:662)
   at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)


Такое ощущение, что в response нечего нет.

Автор:  Amir [ 14 июн 2012, 13:11 ]
Заголовок сообщения:  Re: DHCP always broadcast

Выложили обновление.

Автор:  Zar1n [ 22 июн 2012, 13:04 ]
Заголовок сообщения:  Re: DHCP always broadcast

Работает. Усе окей

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/