forum.bitel.ru http://forum.bitel.ru/ |
|
[5.1] Не пишется to_number в log_session_{mid}_yyyymm http://forum.bitel.ru/viewtopic.php?f=5&t=6713 |
Страница 1 из 1 |
Автор: | afedorov [ 18 апр 2012, 17:39 ] |
Заголовок сообщения: | [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Called-Station-Id заполняю в скрипте предобработки с помощью request.setStringAttribute( -1, RadiusDictionary.Called_Station_Id, called ); Почему-то не пишется в табличку to_number. Точнее там постоянно пишется "*". Это баг или фича, или где-то включается? |
Автор: | skyb [ 18 апр 2012, 19:02 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
скрипт предобработки? можно его сюда? |
Автор: | afedorov [ 18 апр 2012, 19:13 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Код: import bitel.billing.server.radius.*; import ru.bitel.bgbilling.kernel.network.radius.*; void processRequest( request, response, setup, con, conSlave ) { String prefix = "client-mac-address"; int length = prefix.length(); List attributes = request.getAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair ); if( attributes != null ) { for( it = attributes.iterator(); it.hasNext(); ) { RadiusAttribute ra = (RadiusAttribute)it.next(); String value = ra.getValue(); if( value.startsWith( prefix ) ) { request.setStringAttribute( -1, RadiusStandartAttributes.Calling_Station_Id, value.substring( length + 1 ) ); } } } nas_port_id = request.getStringAttribute( -1, 87, null ); if( nas_port_id != null ) { String called = nas_port_id.substring(6); print("DEBUG NAS-Port-Id="+nas_port_id+" -> called="+called); request.setStringAttribute( -1, RadiusDictionary.Called_Station_Id, called ); } else { print("DEBUG NAS-Port-Id=null"); } } В логах видно, что called заполняется правильно. Код: 04-18/17:14:58 INFO [radiusListener-p-12-t-24] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2103.334 -> called=2103.334 04-18/17:14:58 INFO [radiusListener-p-12-t-12] LoggingPrintStream - DEBUG NAS-Port-Id=0/1/0/2217.1206 -> called=2217.1206 04-18/17:14:58 INFO [radiusListener-p-12-t-5] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/1501 -> called=1501 04-18/17:14:58 INFO [radiusListener-p-12-t-21] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2211.1112 -> called=2211.1112 04-18/17:14:58 INFO [radiusListener-p-12-t-43] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2223.1043 -> called=2223.1043 04-18/17:14:58 INFO [radiusListener-p-12-t-6] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2223.1060 -> called=2223.1060 04-18/17:14:58 INFO [radiusListener-p-12-t-16] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2221.142 -> called=2221.142 04-18/17:14:58 INFO [radiusListener-p-12-t-43] LoggingPrintStream - DEBUG NAS-Port-Id=0/1/0/2214.1418 -> called=2214.1418 04-18/17:14:58 INFO [radiusListener-p-12-t-46] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2210.416 -> called=2210.416 04-18/17:14:58 INFO [radiusListener-p-12-t-20] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2103.334 -> called=2103.334 04-18/17:14:58 INFO [radiusListener-p-12-t-48] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2210.422 -> called=2210.422 04-18/17:14:58 INFO [radiusListener-p-12-t-53] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2223.1075 -> called=2223.1075 04-18/17:14:58 INFO [radiusListener-p-12-t-15] ScriptInstance - DEBUG NAS-Port-Id=0/1/0/2221.128 -> called=2221.128 Мак адрес в from_number пишется, а в to_number звездочки. |
Автор: | afedorov [ 18 апр 2012, 19:19 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Собственно задача в том, чтобы привязать абонентов к портам. В NAS-Port-Id числа через точку - это outer и inner vlan'ы, каждый порт имеет уникальное сочетание outer+inner. from_number занят маком, поэтому решил заюзать to_number и добавлять правила, что конкретным логинам можно "звонить" на эти конкретные "типа номера". а там все равно звезды ![]() |
Автор: | skyb [ 19 апр 2012, 05:58 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Код: import bitel.billing.server.radius.*; prefix = "client-mac-address"; length = prefix.length(); attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair ); if( attributes != null ) for( it = attributes.iterator(); it.hasNext(); ) { ra = it.next(); value = ra.getValue(); if( value.startsWith( prefix ) ) { request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, value.substring( length + 1 ) ); } } Поменяйте на нужно и может и поможет =) |
Автор: | afedorov [ 19 апр 2012, 11:19 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Чего менять то? В Calling_Station_Id все прекрасно заносится. С этим проблем нет. А мне надо Callied_Station_Id. Т.е. например после такого тестового кода: Код: import bitel.billing.server.radius.*; request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, "XXX" ); request.setStringAttribute( RadiusStandartAttributes.Called_Station_Id, "YYY" ); в from_number имеем XXX, а вот в to_number по прежнему звезды, а не YYY. Почему? |
Автор: | afedorov [ 19 апр 2012, 13:55 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
дело было в nas.port_phone все заработало. |
Автор: | skyb [ 19 апр 2012, 16:20 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
что было то? |
Автор: | afedorov [ 19 апр 2012, 16:51 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
в конфиге присутствовало nas.port_phone.*="*" |
Автор: | skyb [ 20 апр 2012, 05:53 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
ааа))) |
Автор: | snark [ 20 апр 2012, 18:34 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
afedorov писал(а): Собственно задача в том, чтобы привязать абонентов к портам. У меня это давно работает, правда через объекты. |
Автор: | afedorov [ 20 апр 2012, 19:13 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Через какие объекты? |
Автор: | snark [ 20 апр 2012, 20:42 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Объекты договора. При первом коннекте IP адрес свича и номер порта пробивается в объект договора и потом, при каждом последующем подключении, приходящие от юзера IP адрес и порт свича сравниваются с этим объектом и если совпало, то пускает, а если не совпало - дает отлуп. Почему именно объекты, а не как то еще? Доступ к объектам удобнее - прямо в договоре, а не в какой-то там подменюшке модуля. |
Автор: | skyb [ 21 апр 2012, 05:03 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
снарк, а расскажи как работать с объектами и каково практическое их применение помимо этого скрипта, так и не доперли =) |
Автор: | Phricker [ 21 апр 2012, 11:10 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Техучет. Т.е. кто откуда и куда. Допустим для модуля телефонии это самое то. Где абонент подключен, от какого шкафа и пр. и пр. я щас буду это запиливать ![]() ![]() |
Автор: | snark [ 21 апр 2012, 14:57 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
skyb писал(а): расскажи как работать с объектами и каково практическое их применение помимо этого скрипта На неделе думаю статью запилить в вики - там, в общем то, все завязано на работе с объектами. Правда у меня 5.0, но думаю в старших версиях не сильно будет отличаться. Практическое применение тупо простое: 1. Как и говорил Phricker - _точно_ знать _куда/где_ подключен абонент. 2. Не допустить обмена логинами/паролями, т.е. даже если пользователь А отдаст свой логин и пароль пользователю Б, то у последнего просто ничего не будет работать, т.к. эта пара логин+пароль действительна только по месту подключения пользователя А. Получается что у всех юзеров может быть вообще один пароль, например 123456, а воспользоваться чужим логином все равно не получится. skyb писал(а): так и не доперли =) just as planned же ))) |
Автор: | skyb [ 22 апр 2012, 06:56 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
о...давай давай, нужная вещь |
Автор: | snark [ 24 апр 2012, 16:06 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Бета версия статьи тут (это все работает в 5.0), но общий смысл, думаю, будет понятен. |
Автор: | afedorov [ 25 апр 2012, 14:17 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
Насколько я понял в вашей реализации на контракт вешаются объекты в которых инфа о том, откуда можно подключаться, но к конкретным логинам контракта эти объекты не привязаны и любой логин контракта сможет подключиться из любой точки описанной в объектах этого контракта? P.S. Кода не многовато? Какой у вас call rate и какие процессорные мощности на сервере? |
Автор: | snark [ 26 апр 2012, 19:53 ] |
Заголовок сообщения: | Re: [5.1] Не пишется to_number в log_session_{mid}_yyyymm |
afedorov писал(а): Насколько я понял в вашей реализации на контракт вешаются объекты в которых инфа о том, откуда можно подключаться, но к конкретным логинам контракта эти объекты не привязаны и любой логин контракта сможет подключиться из любой точки описанной в объектах этого контракта? Именно так. Я не вижу смысла прибивать гвоздями конкретный логин/алиас договора к свичу/порту, т.к. у меня "кол-во абон. платы = абон. плата * кол-во логинов" (анлимы же, доп логин - всего лишь уход от доп. договора), а раз клиент платит - не все ли равно с какого именно свича/порта он зайдет? Например: если у него 2 логина в разных концах города - мне проще разрешить юзеру пользоваться его логинами/алиасами в любой точке подключения, чем общаться с ним и объяснять что он не может пользоваться логином А в точке Б - так и юзер доволен и мне спокойней и, главное, прибыльнее. afedorov писал(а): Кода не многовато? Насколько я смог разобраться - через API короче не получится, но если Вы сможете - буду рад посмотреть как это можно сделать. afedorov писал(а): Какой у вас call rate и какие процессорные мощности на сервере? Call rate большой только в начале месяца и только в полночь, вот тогда мой слабенький сервак "проседает", все остальное время полет нормальный. Сервер, на котором живут все компоненты БГБ и мускул (InnoDB), такой: Код: # sysctl dev.acpi.0.%desc dev.acpi.0.%desc: INTEL S3200SHL # sysctl hw.model hw.model: Intel(R) Core(TM)2 Duo CPU E7300 @ 2.66GHz # sysctl hw.realmem hw.realmem: 9126805504 "Проседает" только по памяти (загрузка проца стабильно 5-10%), т.к. мускулу ее не хватает, а мать бОльше не понимает. Сейчас выношу мускул на отдельный сервак с 32ГБ оператики и, надеюсь, тогда все будет нормально, т.е. без "проседаний". |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |