forum.bitel.ru http://forum.bitel.ru/ |
|
5.2: preprocessDhcpRequest http://forum.bitel.ru/viewtopic.php?f=44&t=8837 |
Страница 1 из 1 |
Автор: | borisk [ 16 янв 2014, 12:48 ] |
Заголовок сообщения: | 5.2: preprocessDhcpRequest |
Добрый день! В сети используются коммутаторы 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. Проблема горит |
Автор: | Amir [ 17 янв 2014, 18:28 ] |
Заголовок сообщения: | Re: 5.2: preprocessDhcpRequest |
dhcp.deviceSearchMode=1 сначала ищет, потом уже выполняется предобработка. Попробуйте указать dhcp.deviceSearchMode=0 - идет поиск устройства по giaddr - потом вызов его preprocessDhcpRequest, затем поиск агентского устройства по agentRemoteId и вызов его preprocessDhcpRequest. |
Автор: | borisk [ 17 янв 2014, 22:56 ] |
Заголовок сообщения: | Re: 5.2: preprocessDhcpRequest |
Сейчас буду пробовать. Но вы эту фичу в документации отразите, пожалуйста. |
Автор: | borisk [ 18 янв 2014, 21:21 ] |
Заголовок сообщения: | Re: 5.2: preprocessDhcpRequest |
Да, спасибо, так работает! |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |