Рвётся связь

Установка, настройка, поддержка
Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Рвётся связь

Сообщение Spider84 »

pppd + radius

рвётся связь. Потом её можно воставить и работать дальше. Но ведь она рвётся! Временной интервал разный от 3х минут до 12 часов. Было подозрение на Idle, но ведь у меня работает аська, да и рвётся бывает в процессе сёрфига.

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

отвечаю сам себе, авось кому пригодится.
Разбирался я с этим глюком на шёл причину. Связь рвётся с отмазкой на истёкший лимит времени. Лимит устанавливается в Session-Timeout радиусом. Эту перемнную заполняет скрипт Auth.pm на основании данных из таблиц мускул.
Если нет ограничений на день, месяц или год, как в моём случае, то скрипт ограничивает (пытается) время соединения месяцем, точнее до первого числа следющего месяца.

Код: Выделить всё

UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD(curdate(), INTERVAL 1 MONTH), '%Y-%m-01')) - UNIX_TIMESTAMP() 
этой строкой. К примеру у меня получается 2453695 (из логов мускула), а скрипт выставляет в соединение 28863. А зависимость такая: 28863 = 0х70BF, 2453695 = 0х2570BF. Видно, что используется только младшие 16 бит. ПОЧЕМУ!? Где идёт срез? Пока обошёлся заменой строки

Код: Выделить всё

my $time_limit  = $self->{TIME_LIMIT};
на

Код: Выделить всё

my $time_limit  = 0;

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Возможно это таже проблема что и в мпд счётчик на лимит сесии слишком мал в NAS сервера и поэтому нужно высталять саксимальную длительность сесии.

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

Так ведь обрезаное число выходит уже из Перл скрипта. А на счёт короткого счётчика это ты зря. Она там вот какой:

Код: Выделить всё

int      maxconnect;     /* Maximum connect time (seconds) */
а это аж 32 бита

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

покажите результат

radtest.sh

будем щас разбираться

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

Код: Выделить всё

# ./radtest.sh auth
auth
/opt/abills/libexec
Acct-Interim-Interval = 60,
Session-Timeout = 22240,
PPPD-Upstream-Speed-Limit = 0,
Octets-Direction = 1,
Framed-IP-Address = 10.7.0.2,
Session-Octets-Limit = 2147483648,
Framed-IP-Netmask = 255.255.255.255,
PPPD-Downstream-Speed-Limit = 0,

Auth test end
А должно быть 2447072

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Опишите тарифный план

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

а он то тут при чём?

Код: Выделить всё

SELECT IF (
dv.logins =0, tp.logins, dv.logins
) AS logins, 
IF (
dv.filter_id != '', dv.filter_id, tp.filter_id
), 
IF (
dv.ip >0, INET_NTOA( dv.ip ) , 0
), INET_NTOA( dv.netmask ) , dv.tp_id, dv.speed, dv.cid, tp.day_time_limit, tp.week_time_limit, tp.month_time_limit, UNIX_TIMESTAMP( DATE_FORMAT( DATE_ADD( curdate( ) , INTERVAL 1 
MONTH ) , '%Y-%m-01' ) ) - UNIX_TIMESTAMP( ) , tp.day_traf_limit, tp.week_traf_limit, tp.month_traf_limit, tp.octets_direction, 
IF (
count( un.uid ) + count( tp_nas.tp_id ) =0, 0, 
IF (
count( un.uid ) >0, 1, 2
)
), UNIX_TIMESTAMP( ) , UNIX_TIMESTAMP( DATE_FORMAT( FROM_UNIXTIME( UNIX_TIMESTAMP( ) ) , '%Y-%m-%d' ) ) , DAYOFWEEK( FROM_UNIXTIME( UNIX_TIMESTAMP( ) ) ) , DAYOFYEAR( FROM_UNIXTIME( UNIX_TIMESTAMP( ) ) ) , dv.disable, tp.max_session_duration, tp.payment_type, tp.credit_tresshold, tp.rad_pairs, count( i.id ) , tp.age, dv.callback
FROM (
dv_main dv, tarif_plans tp
)
LEFT JOIN users_nas un ON ( un.uid = dv.uid ) 
LEFT JOIN tp_nas ON ( tp_nas.tp_id = tp.id ) 
LEFT JOIN intervals i ON ( tp.id = i.tp_id ) 
WHERE dv.tp_id = tp.id
AND dv.uid = '1'
GROUP BY dv.uid
LIMIT 0 , 30 
даёт скрипту понять, что day_time_limit week_time_limit month_time_limit max_session_duration равны 0, от сюда скрипт делает вывод о использовании $self->{TIME_LIMIT}, которая в этом скрипте есть UNIX_TIMESTAMP( DATE_FORMAT( DATE_ADD( curdate( ) , INTERVAL 1
MONTH ) , '%Y-%m-01' ) ) - UNIX_TIMESTAMP( ). Так вот это самое значение и обрезается. Я в пере не сильно силён (мне си роднее), и вижу что переменные не типизируются. Так каким образом может сокращаться разрядность?

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Просто если тарифный план с интервалами по трафику то рвёт на границе интервалов

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Да а потом идут ещё вычисления нет ли подщёта трафика и т д

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

Да идут, но на эту цифру они уже не влияют. Ты или нет писал эти скрипты? Я за сутки уже разобрался в алгоритме. Знал бы точно как перл формирует переменные уже бы всё вылечилось.
В любом случае тарифный план я свой описал. Просто пустой тариф. Без всяких. ХАЛЯВА :)

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

Не не я, я просто отвечаю на вопросы, єтио не мой биллинг, я сюда случайно попал :-))

проверить очень просто нужно поставить принт переменной

$self->{TIME_LIMIT}

нескольких местах

и увидить где точно она меняется или перенаправляется

и запустить radtest.sh


у меня кстати пробовал такого нету все нормально пашет.

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

Вот! Нашёл! В оригинале Auth.pm так:

Код: Выделить всё

 for(my $i=0; $i<=$#time_limits; $i++) {
   if ($time_limit > $time_limits[$i]) {
     $time_limit = $time_limits[$i];
    }
  }
Но почему "<=" ? Надо же просто меньше. Вот всё и наладилось.

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Сообщение ~AsmodeuS~ »

количество елементов масива в перле

$#time_limits + 1

Тоесть при Вашем решении ситуации Вы пропускаете какойто лимит установленый биллингом

Spider84
Сообщения: 25
Зарегистрирован: Сб дек 30, 2006 7:21 am
Контактная информация:

Сообщение Spider84 »

ладно. Уговорил. Пока искал причину нашёл интересную вещь. А зачем скидывать с линии пр переходе с одного временного интервала на другой? Какой смысл заложен в это?

Ответить