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

Автосоздание Устройства+Порта+Договора+Сервиса Opt82
http://forum.bitel.ru/viewtopic.php?f=19&t=9319
Страница 1 из 1

Автор:  Угрюмов Роман [ 03 июн 2014, 13:47 ]
Заголовок сообщения:  Автосоздание Устройства+Порта+Договора+Сервиса Opt82

У нас реализована схема подключения абонентов с использованием Opt82.
Для идентификации используется Идентификатор устройства и порт на устройстве.
Если заранее создать устройство и интерфейсы на устройстве и соответственно завести договор с сервисом то авторизация проходит.
В настоящий момент, для автоматизации этого процесса мы пишем специальный скрипт, который по приходу пакета авторизации автоматически
создает Устройство (если оно отсутствует), порт (если отсутствует), договор и сервис на договоре.
Скрипт отрабатывает верно, то есть Устройство+Порт+Договор+Сервис в BGBilling создаются верно, но не удается авторизоваться на этом договоре.
Сервис упорно находится в состоянии "удалено".
Однако! Если перегрузить биллинг, то на этом же договоре авторизация проходит.
Ну куда копать?

Автор:  stark [ 03 июн 2014, 13:55 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

А скрипт как создает все это ? через наши Web-сервисы или напрямую в БД пишет ?

Автор:  Угрюмов Роман [ 03 июн 2014, 14:04 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

В функции protected void setAgentOptions( RadiusPacket request ) анализируется MAC адрес устройства
Если МАС устройства совпадает с заданным (это специальная коробка, выдаваемая инженеру, который ее будет втыкать в кабель у клиента)
то производится комплекс операций по автосозданию устройства порта договора и сервиса
(Отправил скрипт в личку)

Автор:  stark [ 03 июн 2014, 14:45 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Нужно посмотреть в логи access-а какие события туда приходят и в каком порядке . Возможно, например, что событие создание сервиса приходит, например, раньше события создания устройства.

Автор:  Угрюмов Роман [ 03 июн 2014, 14:48 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Я сейчас обнаружил, что на строке
servService.inetServUpdate( serv, new ArrayList<InetServOption>(), false, false, 0 );
возникает NullPointerExeption

Автор:  stark [ 03 июн 2014, 14:51 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Угрюмов Роман писал(а):
Я сейчас обнаружил, что на строке
servService.inetServUpdate( serv, new ArrayList<InetServOption>(), false, false, 0 );
возникает NullPointerExeption

покажите его.

Автор:  Угрюмов Роман [ 03 июн 2014, 14:56 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Она сейчас стала 451 строкой
Код:
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.inetServUpdate(InetServServiceImpl.java:462)
        at custom.bgbilling.modules.inet.dyn.device.redback.SmartEdgeClipsProtocolHandler.CreateTemporaryContract(SmartEdgeClipsProtocolHandler.java:451)
        at custom.bgbilling.modules.inet.dyn.device.redback.SmartEdgeClipsProtocolHandler.setAgentOptions(SmartEdgeClipsProtocolHandler.java:94)
        at ru.bitel.bgbilling.modules.inet.dyn.device.redback.SmartEdgeClipsProtocolHandler.preprocessAccessRequest(SmartEdgeClipsProtocolHandler.java:219)
        at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.preprocessAccessRequest(InetRadiusProcessor.java:352)
        at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.preprocessAccessRequest(InetRadiusProcessor.java:1)
        at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accessRequest(RadiusProcessor.java:382)
        at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:59)
        at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accessRequest(InetRadiusListenerWorker.java:1)
        at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processPacket(RadiusListenerWorker.java:228)
        at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.runImpl(RadiusListenerWorker.java:147)
        at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)

Автор:  stark [ 03 июн 2014, 14:58 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

а версия какая у вас ?

Автор:  Угрюмов Роман [ 03 июн 2014, 14:59 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Информация о версии:

Клиент: вер. 6.0 сборка 1314 от 14.04.2014 19:58:50
os: Windows Vista; java: Java HotSpot(TM) Client VM, v.1.6.0_07
ВНИМАНИЕ: Необходимо обновить таймзоны
Сервер: вер. 6.0 сборка 1725 от 14.04.2014 19:59:03
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_21
ВНИМАНИЕ: Спецификация версии 1.7 не рекомендуется

bill вер. 6.0 сборка 343 от 12.03.2014 19:11:40
card вер. 6.0 сборка 226 от 05.02.2014 15:53:15
inet вер. 6.0 сборка 1370 от 14.04.2014 16:39:50
npay вер. 6.0 сборка 224 от 10.04.2014 19:28:32
ru.bitel.bgbilling.plugins.cladr вер. 6.0 сборка 121 от 05.02.2014 15:55:14

Автор:  stark [ 03 июн 2014, 15:14 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Проблема ваша в том, что вы договор создаете в другом соединении к базе. А текущая транзакция, в которой создается сервис эти данные не считывает, не находит договора. Лучше используйте то же самое соединение к базе. Ну и в случае ошибки можно вызывать rollback и откатывать изменения (но это уже по желанию).

Автор:  stark [ 03 июн 2014, 15:27 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Возьмите соединение так
Код:
context.getConnectionSet().getConnection()


Но только его нельзя закрывать .

Автор:  Угрюмов Роман [ 03 июн 2014, 16:13 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Эту часть победили, сервис стал нормально создаваться, но он все равно в находится в состоянии "удален"
Код:
Packet type: Access-Request
Identifier: 191
Authenticator: {C9 4F AF BF EC 5F 41 5F 85 EE 13 55 C2 02 9F 61}
Attributes:
  User-Name=d4:ca:6d:7b:c9:8a
  NAS-Port-Id=3/3 vlan-id 100 clips 264128
  NAS-Identifier=RedBack
  User-Password=Redback
  NAS-IP-Address=172.16.98.7
  NAS-Port=50528256
  Service-Type=5
  Calling-Station-Id=Vlan100+Ethernet1/5#\0x00\0x1f\0xffx\0xff\0xff
  NAS-Port-Type=5
  Platform-Type=6
  Medium-Type=11
  Agent-Remote-Id={00 1F CE 78 F5 B6}
  UNKNOWN[2352-202]={3D 3D 07 01 D4 CA 6D 7B C9 8A}
  UNKNOWN[2352-202]={0C 0C 07 46 6F 78 32 30 31 31}
  Agent-Circuit-Id={56 6C 61 6E 31 30 30 2B 45 74 68 65 72 6E 65 74 31 2F 35}
  OS-Version=11.1.2.7p2
  Mac-Addr=d4-ca-6d-7b-c9-8a
  NAS-Real-Port=855638116
  UNKNOWN[3561--1]={02 08 00 1F CE 78 F5 B6}
  UNKNOWN[3561--1]={01 15 56 6C 61 6E 31 30 30 2B 45 74 68 65 72 6E 65 74 31 2F 35}

06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - Start setAgentOptions
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - Parse as Qtech SWITCH bytes (setAgentOptions)
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - deviceIdString   001FCE78F5B6
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - devicePort   5
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - deviceMAC d4-ca-6d-7b-c9-8a
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - AutoCreate routine started!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - CreateTemporaryContract started!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - GetDeviceId: -1
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - CreateDevice started!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - IsPortExists: 0
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - CreatePort started!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] CommonKernelEventProcessor - Process event cid:0; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 0; scid: -1; userId: 0; timestamp: 1401790114620
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] CommonKernelEventProcessor - Process event cid:90225; event:Event[ru.bitel.bgbilling.kernel.event.events.system.ContractCreateEvent] moduleId: 0; pluginId: no; cid: 90225; scid: -1; userId: 0; timestamp: 1401790114714
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - inetServUpdate! deviceId:61 cid: 90225
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - inetServUpdate Ok!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - Set Group - Tehnological!
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - SetContractTimeStamp!90225 :  03.05.2014  14:08:34
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] SmartEdgeClipsProtocolHandler - AutoCreate routine finished! 90225
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - REQUEST_AFTER_PREPROCESS:
Packet type: Access-Request
Identifier: 191
Authenticator: {C9 4F AF BF EC 5F 41 5F 85 EE 13 55 C2 02 9F 61}
Attributes:
  User-Name=001fce78f5b6:566c616e3130302b45746865726e6574312f35
  NAS-Port-Id=3/3 vlan-id 100 clips 264128
  NAS-Identifier=RedBack
  User-Password=Redback
  NAS-IP-Address=172.16.98.7
  NAS-Port=50528256
  Service-Type=5
  Calling-Station-Id=d4ca6d7bc98a
  NAS-Port-Type=5
  Platform-Type=6
  Medium-Type=11
  Agent-Remote-Id={00 1F CE 78 F5 B6}
  UNKNOWN[2352-202]={3D 3D 07 01 D4 CA 6D 7B C9 8A}
  UNKNOWN[2352-202]={0C 0C 07 46 6F 78 32 30 31 31}
  Agent-Circuit-Id={56 6C 61 6E 31 30 30 2B 45 74 68 65 72 6E 65 74 31 2F 35}
  OS-Version=11.1.2.7p2
  Mac-Addr=d4-ca-6d-7b-c9-8a
  NAS-Real-Port=855638116
  UNKNOWN[3561--1]={02 08 00 1F CE 78 F5 B6}
  UNKNOWN[3561--1]={01 15 56 6C 61 6E 31 30 30 2B 45 74 68 65 72 6E 65 74 31 2F 35}
Common options: {agentRemoteId=001FCE78F5B6, interfaceId=5, deviceState=1}
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetNas - AgentDevice not found.
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetNas - Search serv on deviceId=2; interfaceId=5
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - [username=001fce78f5b6:566c616e3130302b45746865726e6574312f35] InetServ not found.
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - [username=001fce78f5b6:566c616e3130302b45746865726e6574312f35] Authenticated as inetServId:3
06-03/14:08:34  INFO [rdsLstnr-p-9-t-1] InetNas - AgentDevice not found.
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - Write new waiting connection to DB
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - New connection id=40991
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - Return code=0
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetConnectionKeyMap - interfaceId not set
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetDhcpHelperProcessor - Put auth accept 2:0:5:D4CA6D7BC98A
06-03/14:08:36  INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - RESPONSE_BEFORE_POSTPROCESS:
Packet type: Access-Accept
Identifier: 191
Authenticator: {}
Attributes:
  Reply-Message=1
  Framed-IP-Address=192.168.172.2
  DHCP-Max-Leases=1
  Service-Name:1=RSE-SVC-EXT
  Service-Options:1=1
  Service-Parameter:1=Rate=1000 Burst=250000
  IP-Interface-Name=NOAUTH

Process time auth: 2045

Автор:  Угрюмов Роман [ 03 июн 2014, 16:35 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Но! Если перегрузить bgbilling и bginet_access то он переходит в состояние "включен"

Автор:  stark [ 03 июн 2014, 16:45 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Угрюмов Роман писал(а):
06-03/14:08:34 INFO [rdsLstnr-p-9-t-1] InetNas - AgentDevice not found.
06-03/14:08:34 INFO [rdsLstnr-p-9-t-1] InetNas - Search serv on deviceId=2; interfaceId=5
06-03/14:08:34 INFO [rdsLstnr-p-9-t-1] InetRadiusProcessor - [username=001fce78f5b6:566c616e3130302b45746865726e6574312f35] InetServ not found.


У вас не находит устройство и сервис . Попробуйте вызвать в конце

Код:
context.getConnectionSet().commit();


Вообще обработчик протокола не задумывался для таких действий. Могут вылезти еще всякие проблемы типа deadlock-ов и т.п.

Автор:  Угрюмов Роман [ 03 июн 2014, 16:48 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

stark писал(а):
Вообще обработчик протокола не задумывался для таких действий. Могут вылезти еще всякие проблемы типа deadlock-ов и т.п.

А у меня два имбицила монтажника которые при обжимке пары путают не говоря уже о номерах портов на свичах. Это жизненная необходимость и поверьте мне не только моя.

Автор:  stark [ 03 июн 2014, 16:52 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Так работать не будет. Вы же устройство добавляете . Даже если его создавать вручную, access его не подцепит , пока вы не нажмете конопку "Перечитать конфигурацию на серверах".
Это нужно вызвать
Код:
InetDeviceService.deviceReload();

после добавления устройства.

Автор:  stark [ 03 июн 2014, 17:00 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

В общем скорее всего без помощи с нашей стороны это все равно работать не будет. Там все происходит асинхронно. Напишите лучше в helpdesk.

Автор:  stark [ 03 июн 2014, 17:05 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

И еще можно экспериментировать. Вызывать Thread.sleep после каждой операции типа создание устройства и т.п.

И еще желательно знать если просто зайти в сервис и пересохранить, то он меняет состояние?

Автор:  Угрюмов Роман [ 03 июн 2014, 17:08 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

stark писал(а):
И еще желательно знать если просто зайти в сервис и пересохранить, то он меняет состояние?

Нет, сервис упорно в состоянии "удален"

Автор:  Amir [ 03 июн 2014, 17:17 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Помоему это лучше сделать через личный кабинет.

Например, настраивается radius.disable.accessCodes=1, radius.disable.servId=<servId> для того, чтобы если сервис не найден, абонент все равно мог подключиться, например, с серым IP с ограниченным доступом только к ЛК.
Далее заходим в ЛК договора, там доступно "Дополнительное действие" - "Подключиться", которое по IP-адресу, с которого зашли в ЛК находит активную сессию, в которой есть информация об устройстве (agentDeviceId), порте/VLAN (circuitId). На основе этой информации дополнительное действие создает сервис (и сбрасывает сессию).

Вариант если договора нет: монтажник заходит сначала не в ЛК, а в создание договора по карточке модуля Card и по логину паролю карточки (которые, например, просто могут быть перечислены на бумажке) сначала создает договор.

Немного не то, но похоже:
http://wiki.bitel.ru/index.php/DHCP82_% ... 1%81%D1%83

Автор:  Угрюмов Роман [ 03 июн 2014, 17:22 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Хочется сделать без всякой ручной работы. Вставили коробочку с известным MAC в порт у клиента и все что нужно создано. Монтажники настолько тупые, что им ничего доверить нельзя

Автор:  Угрюмов Роман [ 03 июн 2014, 17:28 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

И не страшно что по первому пакету нет авторизации! Это не важно, главное что все создается, и какими-то манипуляциями два раза мне удалось перевести сервис в состояние "включен". Типа перезагрузкой, нажатием на кнопки перечитать на серверах, включить, синхронизировать. Пару раз мне это удавалось и тогда авторизайия идет.

Автор:  Amir [ 03 июн 2014, 17:33 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Попробуйте найти в каком случае срабатывает. Например, попробуйте после срабатывания скрипта нажать Перечитать конфигурацию и посмотреть, не переключится ли состояние в течении минуты. Если не переключится - попробуйте пересохранить сервис.

Автор:  Угрюмов Роман [ 03 июн 2014, 17:51 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Amir писал(а):
Попробуйте найти в каком случае срабатывает.

1) Если нет устройства и скриптом создано устройство, порт, договор, сервис
./bgbilling restart
./bginet_access restart
И больше не нажимал вообще никаких кнопок, сервис стал "включен" авторизация прошла
2) Если после этого на другом порту попробовать авторизовываться то создается порт договор сервис и авторизация проходит со второй попытки.

Автор:  Amir [ 03 июн 2014, 17:57 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Попробуйте при создании устройства сразу после добавления в БД вызвать commit и только после этого послать InetReloadEvent.

Автор:  Угрюмов Роман [ 03 июн 2014, 18:59 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Нет, помогает только перезагрузка

Автор:  stark [ 04 июн 2014, 10:39 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Ну попробуйте тогда только создание устройства сделать через скрипт, а остальное все вручную. В этом варианте будет работать ?

Автор:  Угрюмов Роман [ 04 июн 2014, 12:48 ]
Заголовок сообщения:  Re: Автосоздание Устройства+Порта+Договора+Сервиса Opt82

Общем проблему решили таким костылем.
1) Руками создали специальное устройство с идентификатором AUTOCREATE , для него договор и сервис в состоянии ОТКЛЮЧЕН
2) При приходе пакета авторизации если нет такого устройства то создаю новое устройство и авторизую его с AUTOCREATE.
Поскольку сервис на договоре находится в статусе ОТКЛЮЧЕН, то radius выдает Reject
3) Приходит второй пакет авторизации. Поскольку для него устройство уже создано, то создается порт+договор+ сервис и перебрасывается авторизация опять на AUTOCREATE.
Соответственно radius выдает Reject
4) Приходит третий пакет на авторизацию. Поскольку Устройство+порт+договор+ сервис созданы то авторизация проходит успешно.
Технически схема работает, но не красивая, хотелось бы сразу же в первом пакете все создать и получить Accept

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