Рвётся связь
Рвётся связь
pppd + radius
рвётся связь. Потом её можно воставить и работать дальше. Но ведь она рвётся! Временной интервал разный от 3х минут до 12 часов. Было подозрение на Idle, но ведь у меня работает аська, да и рвётся бывает в процессе сёрфига.
рвётся связь. Потом её можно воставить и работать дальше. Но ведь она рвётся! Временной интервал разный от 3х минут до 12 часов. Было подозрение на Idle, но ведь у меня работает аська, да и рвётся бывает в процессе сёрфига.
отвечаю сам себе, авось кому пригодится.
Разбирался я с этим глюком на шёл причину. Связь рвётся с отмазкой на истёкший лимит времени. Лимит устанавливается в Session-Timeout радиусом. Эту перемнную заполняет скрипт Auth.pm на основании данных из таблиц мускул.
Если нет ограничений на день, месяц или год, как в моём случае, то скрипт ограничивает (пытается) время соединения месяцем, точнее до первого числа следющего месяца.
этой строкой. К примеру у меня получается 2453695 (из логов мускула), а скрипт выставляет в соединение 28863. А зависимость такая: 28863 = 0х70BF, 2453695 = 0х2570BF. Видно, что используется только младшие 16 бит. ПОЧЕМУ!? Где идёт срез? Пока обошёлся заменой строки
на
Разбирался я с этим глюком на шёл причину. Связь рвётся с отмазкой на истёкший лимит времени. Лимит устанавливается в Session-Timeout радиусом. Эту перемнную заполняет скрипт Auth.pm на основании данных из таблиц мускул.
Если нет ограничений на день, месяц или год, как в моём случае, то скрипт ограничивает (пытается) время соединения месяцем, точнее до первого числа следющего месяца.
Код: Выделить всё
UNIX_TIMESTAMP(DATE_FORMAT(DATE_ADD(curdate(), INTERVAL 1 MONTH), '%Y-%m-01')) - UNIX_TIMESTAMP()
Код: Выделить всё
my $time_limit = $self->{TIME_LIMIT};
Код: Выделить всё
my $time_limit = 0;
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Так ведь обрезаное число выходит уже из Перл скрипта. А на счёт короткого счётчика это ты зря. Она там вот какой:
а это аж 32 бита
Код: Выделить всё
int maxconnect; /* Maximum connect time (seconds) */
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Код: Выделить всё
# ./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
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
а он то тут при чём?
даёт скрипту понять, что 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( ). Так вот это самое значение и обрезается. Я в пере не сильно силён (мне си роднее), и вижу что переменные не типизируются. Так каким образом может сокращаться разрядность?
Код: Выделить всё
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
MONTH ) , '%Y-%m-01' ) ) - UNIX_TIMESTAMP( ). Так вот это самое значение и обрезается. Я в пере не сильно силён (мне си роднее), и вижу что переменные не типизируются. Так каким образом может сокращаться разрядность?
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Не не я, я просто отвечаю на вопросы, єтио не мой биллинг, я сюда случайно попал )
проверить очень просто нужно поставить принт переменной
$self->{TIME_LIMIT}
нескольких местах
и увидить где точно она меняется или перенаправляется
и запустить radtest.sh
у меня кстати пробовал такого нету все нормально пашет.
проверить очень просто нужно поставить принт переменной
$self->{TIME_LIMIT}
нескольких местах
и увидить где точно она меняется или перенаправляется
и запустить radtest.sh
у меня кстати пробовал такого нету все нормально пашет.
Вот! Нашёл! В оригинале Auth.pm так:
Но почему "<=" ? Надо же просто меньше. Вот всё и наладилось.
Код: Выделить всё
for(my $i=0; $i<=$#time_limits; $i++) {
if ($time_limit > $time_limits[$i]) {
$time_limit = $time_limits[$i];
}
}
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация: