BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 июн 2025, 06:51

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: 5.2: preprocessDhcpRequest
СообщениеДобавлено: 16 янв 2014, 12:48 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Добрый день!

В сети используются коммутаторы Zyxel и SNR. У SNR стандартный Cisco-like Opt82 (где remoteId приходит в subOption 2)
Zyxel же впереди планеты всей и шлет agentRemoteId и порт/vlan в одной subOption 1

Раньше проблему решал путем разнесения коммутаторов на разные dhcp relay, и, соотвественно в биллинге указывал разные форматы опций. Проблем не было. В силу определенных причин надо теперь все объеденить в один dhcp relay. Решил выкрутиться из ситуации через preprocessDhcpRequest.
В конфигурации устройства DHCP relay оставил только:
Цитата:
dhcp.deviceSearchMode=1
dhcp.servSearchMode=6,1


Т. е. убрал определение dhcp.option82.agentRemoteId

Написал свой обработчик протокола для dhcp relay:
Код:
   @Override
   public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response )
      throws Exception
   {
      // Из-за смешения Cisco-like и Zyxel коммутаторов делаем такой вот финт ушами

      DhcpOption agentRemoteId = request.getSubOption( CISCO_REMOTEID_CODE );

      if( agentRemoteId != null )
      {
          logger.info("preprocessDhcpRequest: Cisco-like agentRemoteId");
         byte[] value = new byte[CISCO_REMOTEID_LENGTH];
           System.arraycopy( agentRemoteId.value, CISCO_REMOTEID_POSITION, value, 0, CISCO_REMOTEID_LENGTH );
           request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, value );
      }
      else
      {
          logger.info("preprocessDhcpRequest: Zyxel-like agentRemoteId");

         agentRemoteId = request.getSubOption( ZYXEL_REMOTEID_CODE );
         byte[] value = new byte[ZYXEL_REMOTEID_LENGTH];
           System.arraycopy( agentRemoteId.value, ZYXEL_REMOTEID_POSITION, value, 0, ZYXEL_REMOTEID_LENGTH );
           request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, value );
      }

   }


В результате вроде бы как все хорошо. После обработки получаем примерно вот такое сообщение:
Цитата:
01-16/12:24:21 INFO [dhcpLstnr-p-7-t-18] InetAbstractDhcpProcessor - agentRemoteId is empty
01-16/12:24:21 INFO [dhcpLstnr-p-7-t-18] DHCPRelay - preprocessDhcpRequest: Zyxel-like agentRemoteId
01-16/12:24:21 INFO [dhcpLstnr-p-7-t-18] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS:
Message type: BOOT_REQUEST
Dhcp message type: DHCP Discover{1}
htype: 1, hlen: 6, hops: 1
xid: 431457924, secs: 0, flags: 0
Client IP: 0.0.0.0
Your IP: 0.0.0.0
Server IP: 0.0.0.0
Relay IP: x.x.x.254
Client MAC: {BCF685013B8D}
Requested IP Address{50}=x.x.x.120
Parameter request list{55}={1, 3, 6, 12, 15, 28, 66, 121}
Agent information{82}=
sub{1}={000A02E3303031303831}
Common options: {agentRemoteId={303031303831}}
01-16/12:24:21 INFO [dhcpLstnr-p-7-t-18] InetDhcpDevice - Search serv on deviceId: 26 and it's descendants


И вот тут засада. deviceId 26 - это dhcp relay! Почему не происходит поиск дочерних устройств по agentRemoteId? Такое устройство присутствует.

P.S. Проблема горит


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 5.2: preprocessDhcpRequest
СообщениеДобавлено: 17 янв 2014, 18:28 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
dhcp.deviceSearchMode=1 сначала ищет, потом уже выполняется предобработка.
Попробуйте указать dhcp.deviceSearchMode=0 - идет поиск устройства по giaddr - потом вызов его preprocessDhcpRequest, затем поиск агентского устройства по agentRemoteId и вызов его preprocessDhcpRequest.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 5.2: preprocessDhcpRequest
СообщениеДобавлено: 17 янв 2014, 22:56 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Сейчас буду пробовать. Но вы эту фичу в документации отразите, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 5.2: preprocessDhcpRequest
СообщениеДобавлено: 18 янв 2014, 21:21 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Да, спасибо, так работает!


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

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


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

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


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

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