forum.bitel.ru http://forum.bitel.ru/ |
|
BGInetAccess дает exception http://forum.bitel.ru/viewtopic.php?f=44&t=9231 |
Страница 1 из 1 |
Автор: | survivor [ 13 май 2014, 21:23 ] |
Заголовок сообщения: | BGInetAccess дает exception |
Доброго дня, В полностью рабочую схему добавил новый тип устройства уровня доступа (GePON OLT), в принципе для биллинга должно быть все равно - так как устройство так же вставляет в opt82 номер порта (в этом случае разве что виртуального), но в результате получаю ошибку: Код: 05-13/20:03:24 INFO [dhcpLstnr-p-9-t-7] InetAbstractDhcpProcessor - REQUEST: Message type: BOOT_REQUEST Dhcp message type: DHCP Discover{1} htype: 1, hlen: 6, hops: 1 xid: 125318934, secs: 0, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={0515000701} sub{2}={FCFAF7C5AB36} 05-13/20:03:24 DEBUG [dhcpLstnr-p-9-t-7] InetAbstractDhcpProcessor - OP_BOOT_REQUEST 05-13/20:03:24 DEBUG [dhcpLstnr-p-9-t-7] InetAbstractDhcpProcessor - Found device by giaddr id=13 05-13/20:03:24 ERROR [dhcpLstnr-p-9-t-7] DhcpListenerWorker - java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at ru.bitel.bgbilling.modules.inet.runtime.device.AbstractInetDeviceRuntime.getOption82AgentRemoteId(AbstractInetDeviceRuntime.java:97) at ru.bitel.bgbilling.modules.inet.runtime.device.InetDeviceRuntime.getOption82AgentRemoteId(InetDeviceRuntime.java:1) at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processOption82Request(InetAbstractDhcpProcessor.java:395) at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processRequest(InetAbstractDhcpProcessor.java:261) 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:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) dhcpdump запроса: Код: --------------------------------------------------------------------------- TIME: 2014-05-13 20:12:16.018 IP: 109.XXX.49.254 (0:21:a0:71:d1:d0) > 10.199.1.23 (0:c:29:b2:74:d9) OP: 1 (BOOTPREQUEST) HTYPE: 1 (Ethernet) HLEN: 6 HOPS: 1 XID: 5fe4d917 SECS: 0 FLAGS: 0 CIADDR: 0.0.0.0 YIADDR: 0.0.0.0 SIADDR: 0.0.0.0 GIADDR: 109.XXX.49.254 CHADDR: 00:15:60:bb:cb:17:00:00:00:00:00:00:00:00:00:00 SNAME: . FNAME: . OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER) OPTION: 12 ( 13) Host name hp-notebook OPTION: 55 ( 9) Parameter Request List 1 (Subnet mask) 28 (Broadcast address) 2 (Time offset) 3 (Routers) 15 (Domainname) 6 (DNS server) 12 (Host name) 44 (NetBIOS name server) 47 (NetBIOS scope) OPTION: 82 ( 15) Relay Agent Information Circuit-ID 05:15:00:07:01 Remote-ID fc:fa:f7:c5:ab:36 --------------------------------------------------------------------------- dhcpdump обычного запроса от обычного свича уровня доступа (на котором все работает): Код: --------------------------------------------------------------------------- TIME: 2014-05-13 20:12:11.241 IP: 109.XXX.48.1 (0:21:a0:71:d1:d0) > 10.199.1.23 (0:c:29:b2:74:d9) OP: 1 (BOOTPREQUEST) HTYPE: 1 (Ethernet) HLEN: 6 HOPS: 1 XID: 4168f746 SECS: 0 FLAGS: 0 CIADDR: 109.XXX.48.7 YIADDR: 0.0.0.0 SIADDR: 0.0.0.0 GIADDR: 109.XXX.48.1 CHADDR: 00:e0:4c:00:09:39:00:00:00:00:00:00:00:00:00:00 SNAME: . FNAME: . OPTION: 53 ( 1) DHCP message type 3 (DHCPREQUEST) OPTION: 61 ( 7) Client-identifier 01:00:e0:4c:00:09:39 OPTION: 12 ( 6) Host name Router OPTION: 60 ( 15) Vendor class identifier udhcp 0.9.9-pre OPTION: 55 ( 9) Parameter Request List 1 (Subnet mask) 3 (Routers) 6 (DNS server) 12 (Host name) 15 (Domainname) 28 (Broadcast address) 44 (NetBIOS name server) 46 (NetBIOS node type) 47 (NetBIOS scope) OPTION: 82 ( 18) Relay Agent Information Circuit-ID 00:04:04:50:00:03 Remote-ID 00:06:00:0a:8a:d6:63:00 --------------------------------------------------------------------------- Версия биллинга: Код: Сервер: вер. 6.0 сборка 1723 от 10.04.2014 12:49:07 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_41 inet вер. 6.0 сборка 1369 от 07.04.2014 19:04:33 Настройки в биллинге для устройства выполняющего L3 аггрегацию (к нему подключены свичи и этот OLT): Код: # Код субопции 82, содержащей VLAN, позиция и длина в субопции dhcp.option82.vlanId.code=1 dhcp.option82.vlanId.position=0 dhcp.option82.vlanId.length=2 dhcp.option82.interfaceId.code=1 dhcp.option82.interfaceId.position=2 dhcp.option82.interfaceId.length=2 dhcp.option.leaseTime=300 # параметры DHCP к сети не привязанные dhcp.option.serverIdentifier=0.0.0.0 #dhcp.option.leaseTime=600 #dhcp.option.timeServer=ntp.bgbilling.ru # параметр DHCP "основной шлюз" для сети #dhcp.net.option.188.191.0.0:255.255.255.0.gate= #dhcp.net.option.188.191.1.0:255.255.255.0.gate= #dhcp.net.option.188.191.2.0:255.255.255.0.gate= #dhcp.net.option.188.191.3.0:255.255.255.0.gate= #dhcp.option.timeOffset=43200 #dhcp.option.domainName=bgbilling.ru Номер интерфейса в opt82 что у OLT что у свича в конце строки. Разве что у OLT само поле Circuit-ID короче: Circuit-ID 05:15:00:07:01 против Circuit-ID 00:04:04:50:00:03 Это можно отрегулировать к конфиге? Exception может быть из-за этого? |
Автор: | Amir [ 13 май 2014, 23:04 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Падает на разборе Remote-ID. В данном случае, наверное, придется сделать предобработку, т.к. формат Remote-ID разный (в одном случае есть префикс-длина, в другом - нет). http://wiki.bitel.ru/index.php/%D0%9D%D ... B8_DHCP.82 |
Автор: | survivor [ 14 май 2014, 12:44 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
В смущение вводит "Расширьте обработчик процессора протокола типа устройства, с с которого приходит запрос на InetAccess (т.е. чей giaddr указан в пакете)" У меня обработчик процессора протокола пустой. При попытке его редактировать говорит - "не выбран класс". Где об этой процедуре почитать чтоб понять что делать? |
Автор: | survivor [ 14 май 2014, 13:52 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
понимаю что вопрос нубский, но бгбиллинг все более становится средой обитания джава программеров )) чем просто биллингом и от четвертой к шестой версии я все меньше понимаю где чего делать... Просто помогите - где чего ткнуть чтобы вставить код, я уж потом разберусь, тем более пример на вики есть. |
Автор: | Amir [ 14 май 2014, 14:47 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
А можете показать дерево устройств? |
Автор: | survivor [ 14 май 2014, 16:05 ] | ||
Заголовок сообщения: | Re: BGInetAccess дает exception | ||
и еще один:
|
Автор: | Amir [ 14 май 2014, 16:38 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Если под L3 (GEPON) будут только устройства L2 OLD (т.е. формат AgentRemoteId будет одинаков), то можно в конфиге его типа устройства просто указать параметры разбора опций Код: # Нужно указать код субопции опции 82 для извлечения значений
# agentRemoteId обычно находится в субопции 2 dhcp.option82.agentRemoteId.code=2 # interfaceId обычно находится в субопции 1 (circuitId) dhcp.option82.interfaceId.code=1 # vlanId обычно находится в субопции 1 (circuitId) dhcp.option82.vlanId.code=1 # Если в субопции отсутствует заголовок с длиной субопции, то укажите 0. Иначе укажите длину заголовка. # Данный параметр используется в том числе, для того, чтобы извлеченные значения circuitId из DHCP-пакета и из RADIUS-пакета были идентичны. # Соответственно, значение position нужно указывать относительно removeHeader. dhcp.option82.removeHeader=0 # Нужно указать параметры извлечения agentRemoteId из субопции (dhcp.option82.agentRemoteId.code) # позиция значения внутри субопции dhcp.option82.agentRemoteId.position=0 # если длина значения может изменятся и нужно брать значение до конца субопции, то укажите -1 dhcp.option82.agentRemoteId.length=6 # 0, если remoteId в бинарном виде, например, MAC-адрес; 1, если там закодирована строка dhcp.option82.agentRemoteId.type=0 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.interfaceId.code) dhcp.option82.interfaceId.position=4 dhcp.option82.interfaceId.length=1 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.vlanId.code) dhcp.option82.vlanId.position=2 dhcp.option82.vlanId.length=2 |
Автор: | Amir [ 14 май 2014, 16:42 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Если же под L3 (GEPON) будут разные типы устройств, то нужно сделать как здесь http://wiki.bitel.ru/index.php/Поддержка_устройств_с_разными_форматами_опции_DHCP.82#.D0.A0.D0.B0.D0.B7.D0.BD.D1.8B.D0.B5_.D1.82.D0.B8.D0.BF.D1.8B_.D1.83.D1.81.D1.82.D1.80.D0.BE.D0.B9.D1.81.D1.82.D0.B2_c_.D1.80.D0.B0.D0.B7.D0.BD.D1.8B.D0.BC_.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.82.D0.BE.D0.BC_agentRemoteId. Для типа устройства L3 Catalist (GEPON) добавить обработчик процессора протокола (динамический класс): Код: import java.util.Arrays; А для в типе устройства OLT указать параметры разбора CircuitId: import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket; import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter; import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor; public class Dhcp82ProtocolHandler extends ProtocolHandlerAdapter implements DhcpProtocolHandler { @Override public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response ) throws Exception { byte[] agentRemoteId = request.getSubOption( (byte)2 ).value; if( agentRemoteId.length == 8 ) { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 6 ) ); } // OLT else { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 0, 6 ) ); } } } Код: # Нужно указать код субопции опции 82 для извлечения значений
# interfaceId обычно находится в субопции 1 (circuitId) dhcp.option82.interfaceId.code=1 # vlanId обычно находится в субопции 1 (circuitId) dhcp.option82.vlanId.code=1 # Если в субопции отсутствует заголовок с длиной субопции, то укажите 0. Иначе укажите длину заголовка. # Данный параметр используется в том числе, для того, чтобы извлеченные значения circuitId из DHCP-пакета и из RADIUS-пакета были идентичны. # Соответственно, значение position нужно указывать относительно removeHeader. dhcp.option82.removeHeader=0 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.interfaceId.code) dhcp.option82.interfaceId.position=4 dhcp.option82.interfaceId.length=1 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.vlanId.code) dhcp.option82.vlanId.position=2 dhcp.option82.vlanId.length=2 |
Автор: | survivor [ 14 май 2014, 18:08 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Amir, спасибо большое! Все заработало ![]() |
Автор: | survivor [ 14 май 2014, 18:15 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
я сделал первый вариант, со вторым туплю на: "добавить обработчик процессора протокола (динамический класс)" Как это сделать? Создать новый класс и в него вставить код? Но класс создается уже не пустой. Или выбрать какой-то существующий обработчик процессора протокола и его редактировать? Наверное программерам смешно слышать эти вопросы, но я как-то не соображу. |
Автор: | survivor [ 14 май 2014, 18:19 ] | ||
Заголовок сообщения: | Re: BGInetAccess дает exception | ||
Если сделать так как показано на скриншоте, открывается управление динамическим кодом с уже существующим макетом: Код: import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket; import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandler; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.ParameterMap; import ru.bitel.common.sql.ConnectionSet; public class gepon extends ProtocolHandlerAdapter implements ProtocolHandler { @Override public void preprocessAccountingRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 ) throws Exception { } @Override public void postprocessDhcpRequest( DhcpPacket dhcpPacket1, DhcpPacket dhcpPacket2 ) throws Exception { } @Override public void init( Setup setup1, int int2, InetDevice inetDevice3, InetDeviceType inetDeviceType4, ParameterMap parameterMap5 ) throws Exception { } @Override public void postprocessAccessRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 ) throws Exception { } @Override public void preprocessDhcpRequest( DhcpPacket dhcpPacket1, DhcpPacket dhcpPacket2 ) throws Exception { } @Override public void postprocessAccountingRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 ) throws Exception { } @Override public void preprocessAccessRequest( RadiusPacket radiusPacket1, RadiusPacket radiusPacket2, ConnectionSet connectionSet3 ) throws Exception { } } все это заменить на: Код: import java.util.Arrays; import ru.bitel.bgbilling.kernel.network.dhcp.DhcpPacket; import ru.bitel.bgbilling.kernel.network.dhcp.DhcpProtocolHandler; import ru.bitel.bgbilling.modules.inet.access.sa.ProtocolHandlerAdapter; import ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor; public class Dhcp82ProtocolHandler extends ProtocolHandlerAdapter implements DhcpProtocolHandler { @Override public void preprocessDhcpRequest( DhcpPacket request, DhcpPacket response ) throws Exception { byte[] agentRemoteId = request.getSubOption( (byte)2 ).value; if( agentRemoteId.length == 8 ) { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 6 ) ); } // OLT else { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 0, 6 ) ); } } } или только postprocessDhcpRequest?
|
Автор: | Amir [ 14 май 2014, 18:49 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Заменить. Хотя оба варианта должны работать (В ProtocolHandlerAdapter уже есть эти ничего неделающие методы). И имя класса должно совпадать с именем файла. Т.е. имя класса оставить gepon. |
Автор: | survivor [ 14 май 2014, 19:47 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Ага, с механизмом препроцесса все стало ясно. Попробовал второй способ - gepon получил адрес, все работает. Но когда под этим же L3 GEPON создаю устройство типа опычный L2 switch, то: Код: Message type: BOOT_REQUEST Dhcp message type: DHCP Discover{1} htype: 1, hlen: 6, hops: 1 xid: -23281611, secs: 30, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Requested IP Address{50}=109.XXX.49.199 Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={000404B10000} sub{2}={0006000B46CA4F00} Common options: {agentRemoteId=[B@285d8e2} 05-14/18:15:57 INFO [dhcpLstnr-p-9-t-6] InetAbstractDhcpProcessor - Agent device not found by agentRemoteId=000b46ca 05-14/18:15:57 DEBUG [dhcpLstnr-p-9-t-6] InetDhcpProcessor - DHCP_DISCOVER 05-14/18:15:57 DEBUG [dhcpLstnr-p-9-t-6] InetDhcpProcessor - request.giaddr= 109.XXX.49.254, clientAddress=/109.XXX.49.254:67 05-14/18:15:57 INFO [dhcpLstnr-p-9-t-6] InetDhcpDevice - Search serv on deviceId: 13; 1; interfaceId: 0 05-14/18:15:57 INFO [dhcpLstnr-p-9-t-6] InetDhcpProcessor - InetServ not found. Обратил внимание на: Agent device not found by agentRemoteId=000b46ca мак слишком короткий. Должен быть 000b46ca4f00. Проблема наверное здесь?: Код: if( agentRemoteId.length == 8 ) { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 6 ) ); } Но почему? |
Автор: | Amir [ 14 май 2014, 19:55 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Не посмотрел, последнее значение это не длина, а toIndex, т.е. надо Код: if( agentRemoteId.length == 8 ) Хотя где 7 и 5 могут быть и бОльшие значения - это не вызовет ошибки (поэтому 0, 6 нормально отрабатывало).
{ request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 7 ) ); } // OLT else { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 0, 5 ) ); } |
Автор: | survivor [ 15 май 2014, 11:21 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Код: if( agentRemoteId.length == 8 ) { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 7 ) ); } тоже не прокатило (не хватало последнего байта после предпроцесса), но: Код: if( agentRemoteId.length == 8 ) { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 8 ) ); } помогло. правда exception переместился чуть дальше: Код: 05-15/10:16:44 INFO [dhcpLstnr-p-9-t-4] InetAbstractDhcpProcessor - REQUEST:
Message type: BOOT_REQUEST Dhcp message type: DHCP Discover{1} htype: 1, hlen: 6, hops: 1 xid: 1740869417, secs: 6, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Requested IP Address{50}=109.XXX.49.199 Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={000404B10000} sub{2}={0006000B46CA4F00} 05-15/10:16:44 DEBUG [dhcpLstnr-p-9-t-4] InetAbstractDhcpProcessor - OP_BOOT_REQUEST 05-15/10:16:44 DEBUG [dhcpLstnr-p-9-t-4] InetAbstractDhcpProcessor - Found device by giaddr id=13 05-15/10:16:44 INFO [dhcpLstnr-p-9-t-4] InetAbstractDhcpProcessor - REQUEST_AFTER_PREPROCESS: Message type: BOOT_REQUEST Dhcp message type: DHCP Discover{1} htype: 1, hlen: 6, hops: 1 xid: 1740869417, secs: 6, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Requested IP Address{50}=109.XXX.49.199 Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={000404B10000} sub{2}={0006000B46CA4F00} Common options: {agentRemoteId=[B@3067e236} 05-15/10:16:44 DEBUG [dhcpLstnr-p-9-t-4] InetAbstractDhcpProcessor - Found subDevice by identifier id=16 05-15/10:16:44 DEBUG [dhcpLstnr-p-9-t-4] InetDhcpProcessor - DHCP_DISCOVER 05-15/10:16:44 DEBUG [dhcpLstnr-p-9-t-4] InetDhcpProcessor - request.giaddr= 109.XXX.49.254, clientAddress=/109.XXX.49.254:67 05-15/10:16:44 ERROR [dhcpLstnr-p-9-t-4] InetDhcpProcessor - 7 java.lang.ArrayIndexOutOfBoundsException: 7 at ru.bitel.bgbilling.modules.inet.api.server.InetUtils.parseInt(InetUtils.java:495) at ru.bitel.bgbilling.modules.inet.runtime.device.AbstractInetDeviceRuntime.getOption82InterfaceId(AbstractInetDeviceRuntime.java:298) at ru.bitel.bgbilling.modules.inet.runtime.device.InetDeviceRuntime.getOption82InterfaceId(InetDeviceRuntime.java:1) at ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpDevice.findServRuntime(InetDhcpDevice.java:266) at ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor.processOption82RequestImpl(InetDhcpProcessor.java:187) at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processOption82Request(InetAbstractDhcpProcessor.java:453) at ru.bitel.bgbilling.modules.inet.dhcp.InetAbstractDhcpProcessor.processRequest(InetAbstractDhcpProcessor.java:261) 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:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:662) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) |
Автор: | survivor [ 15 май 2014, 11:44 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Получилось ![]() Код: # Нужно указать код субопции опции 82 для извлечения значений # interfaceId обычно находится в субопции 1 (circuitId) dhcp.option82.interfaceId.code=1 # vlanId обычно находится в субопции 1 (circuitId) dhcp.option82.vlanId.code=1 # Если в субопции отсутствует заголовок с длиной субопции, то укажите 0. Иначе укажите длину заголовка. # Данный параметр используется в том числе, для того, чтобы извлеченные значения circuitId из DHCP-пакета и из RADIUS-пакета были идентичны. # Соответственно, значение position нужно указывать относительно removeHeader. dhcp.option82.removeHeader=0 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.interfaceId.code) dhcp.option82.interfaceId.position=4 dhcp.option82.interfaceId.length=1 # Нужно указать параметры извлечения interfaceId из субопции (dhcp.option82.vlanId.code) dhcp.option82.vlanId.position=2 dhcp.option82.vlanId.length=2 Создал новый тип для свичей которые будут под универсальным L3 типом (который терминирует и GePON и обычные свичи) и все заработало! Спасибо еще раз! |
Автор: | survivor [ 15 май 2014, 11:50 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
В итоге GePON и свичи работают оба при таком коде: Код: if( agentRemoteId.length == 8 )
{ request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 2, 8 ) ); } // OLT else { request.setOption( InetDhcpProcessor.AGENT_REMOTE_ID, Arrays.copyOfRange( agentRemoteId, 0, 6 ) ); } |
Автор: | survivor [ 22 май 2014, 18:23 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
у истории оказалось есть продолжение ![]() биллинг почему-то теперь видит всех абонентов (которые на свиче доступа) подключенными к первому порту. Вот логи для второго порта (fastethernet0/2): Код: Message type: BOOT_REQUEST Dhcp message type: DHCP Request{3} htype: 1, hlen: 6, hops: 1 xid: 554854955, secs: 0, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Server Identifier{54}={6D7F31FE} Requested IP Address{50}=109.XXX.49.1 Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={000404B10001} sub{2}={0006000B46CA4F00} Common options: {agentRemoteId=[B@22beebcd} 05-22/16:14:09 DEBUG [dhcpLstnr-p-9-t-10] InetAbstractDhcpProcessor - Found subDevice by identifier id=16 05-22/16:14:09 DEBUG [dhcpLstnr-p-9-t-10] InetDhcpProcessor - DHCP_REQUEST 05-22/16:14:09 DEBUG [dhcpLstnr-p-9-t-10] InetDhcpProcessor - request.giaddr= 109.XXX.49.254, clientAddress=/109.XXX.49.254:67 05-22/16:14:09 INFO [dhcpLstnr-p-9-t-10] InetDhcpDevice - Search serv on deviceId: 16; 1; interfaceId: 0 05-22/16:14:09 INFO [dhcpLstnr-p-9-t-10] InetDhcpProcessor - InetServ found: ContractId: 35; servId: 33 И для 48-го порта: Код: Message type: BOOT_REQUEST Dhcp message type: DHCP Request{3} htype: 1, hlen: 6, hops: 1 xid: 1400915723, secs: 0, flags: 0 Client IP: 0.0.0.0 Your IP: 0.0.0.0 Server IP: 0.0.0.0 Relay IP: 109.XXX.49.254 Client MAC: {001560BBCB17} Server Identifier{54}={6D7F31FE} Requested IP Address{50}=109.XXX.49.2 Host name{12}={hp-notebook} Parameter request list{55}={1, 28, 2, 3, 15, 6, 12, 44, 47} Agent information{82}= sub{1}={000404E0002F} sub{2}={0006000B46CA4F00} Common options: {agentRemoteId=[B@7c9ed5d6} 05-22/16:18:45 DEBUG [dhcpLstnr-p-9-t-10] InetAbstractDhcpProcessor - Found subDevice by identifier id=16 05-22/16:18:45 DEBUG [dhcpLstnr-p-9-t-10] InetDhcpProcessor - DHCP_REQUEST 05-22/16:18:45 DEBUG [dhcpLstnr-p-9-t-10] InetDhcpProcessor - request.giaddr= 109.XXX.49.254, clientAddress=/109.XXX.49.254:67 05-22/16:18:45 INFO [dhcpLstnr-p-9-t-10] InetDhcpDevice - Search serv on deviceId: 16; 1; interfaceId: 0 05-22/16:18:45 INFO [dhcpLstnr-p-9-t-10] InetDhcpProcessor - InetServ found: ContractId: 35; servId: 33 т.е. приходит правильно: sub{1}={000404B10001} sub{1}={000404E0002F} а получается все равно: Search serv on deviceId: 16; 1; interfaceId: 0 Причем, самое интересное, что для гепона все работает корректно - onu сидящие на epon0/1:1 и epon0/1:2 попадают на соответствующие договоры... |
Автор: | Amir [ 22 май 2014, 18:30 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Видимо в конфигурации сейчас получилось, что вытаскивает не последний байт, а предпоследний из 04B10001 и 04E0002F. Нужно смотреть, что в конфигурации по парсингу option82 в устройствах этой ветки. |
Автор: | survivor [ 22 май 2014, 18:54 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
Спасибо за совет, помогла такая конфигурация типа устройства L2 свича: dhcp.option82.removeHeader=2 dhcp.option82.interfaceId.position=2 dhcp.option82.interfaceId.length=2 |
Автор: | survivor [ 22 май 2014, 18:55 ] |
Заголовок сообщения: | Re: BGInetAccess дает exception |
а для гепона оставил: dhcp.option82.removeHeader=0 dhcp.option82.interfaceId.position=4 dhcp.option82.interfaceId.length=1 |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |