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

Техучет. Т.е. кто откуда и куда.
Допустим для модуля телефонии это самое то. Где абонент подключен, от какого шкафа и пр. и пр.
я щас буду это запиливать :D Надеюсь ничего сложного :D

Автор:  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/