napTu
СitizensТип контенту
Профили
Форум
Календарь
Все, що було написано napTu
-
спасибо, реализовал.
-
Я так понял что inet_ntoa переводит четырехбайтное значение в пямяти в стринговое "хх.хх.хх.хх". Если это так, то такое преобразование можно наваять и без использования внешних функций. В этом случае это будет threadsafe?
-
Снимаю шляпу, извиняюсь за безграмотность в данном вопросе. Дк может просто переписать inet_ntostr без использования inet_ntoa. Я так понял inet_ntoa это не встроенная функция...
-
а компилятор только предупреждает о неопределонном поведении: user.cpp: In member function 'void USER::Connect(bool)': user.cpp:594: warning: comparison with string literal results in unspecified behaviour user.cpp:634: warning: comparison with string literal results in unspecified behaviour похоже что это условие игнорируется, три случая сообщений [inet_ntoa error] за сегодня. про указатели прочел, но куда их пхать в данном случае не понял. вот так прокатило без ворнингов: string err="[inet_ntoa error]"; if (!fakeConnect && currIP > 0 && inet_ntostr(currIP) != err )
-
глянул общий лог на предмет подобных ошибок, стало страшно - с десяток за день набежало, но абоненты в большинстве случаев нормально потом отключались и подключались заново. в user.cpp внес поправки чтобы не коннектилось с ip==0 и при конвертации с вышеприведенной ошибкой. завтра посмотрим. STG_LOCKER lock(&mutex, __FILE__, __LINE__); if (!fakeConnect && currIP > 0 && inet_ntostr(currIP) != "[inet_ntoa error]" ) { string scriptOnConnect = settings->GetConfDir() + "/OnConnect"; string scriptOnConnectParams;
-
про консольный лог я проигнорировал, ибо это гемор. будет время, займусь. а из выдержка из /var/log/stargazer.log - ответ на вопрос "какая версия, какие модули?"
-
mysql тут не при чем - используется файловая(текстовая) база данных айпи не вбит криво, ибо оно работало нормально до того, и работает нормально после перезапуска. Возможно что происходит накладка в момент записи в базу данных и одновременного чтения для выполнения процедуры подключения. Кстати, используется три вспомогательных процесса: версия stg-2.405.9.8, хотя в стартапе пишет 2.404 2008-12-10 19:44:53 -- Stg started successfully. 2008-12-10 19:44:53 -- Module: 'Stg configurator v.0.07'. Start successfull. 220 2008-12-10 19:44:53 -- Module: 'Always Online authorizator v.1.0'. Start successfull. 70 2008-12-10 19:44:53 -- Module: 'InetAccess authorizator v.1.2'. Start successfull. 50 2008-12-10 19:44:53 -- Module: 'netflow_cap v.1.3.4'. Start successfull. 15 2008-12-10 19:44:53 -- Traffcounter started successfully. 2008-12-10 19:44:53 -- Users started successfully. 2008-12-10 19:44:53 -- Storage plugin: file_store v.1.02. Loading successfull. 2008-12-10 19:44:52 -- Timer thread started successfully. 2008-12-10 19:44:52 -- Message queue created successfully. msgKey=5555 msgID=1572864 2008-12-10 19:44:52 -- Stg v. Stg 2.404
-
хм... - не мешает - мне проще самому найти ошибку в сервере, чем его кроном ребутить псевдослучайным образом в такт когда у одного из тысячи абонентов случается трабл - этим человеком я и есть, траблу давно порешали. это я сделал в первую очередь
-
еще пару наблюдений: у проблемного абонента похоже не меняется статус в конфигураторе - постоянно висит онлайн (не уверен, пронаблюдаю в след.раз если нужно); сервер не убивается быстро (как обычно менее минуты) по killall stargazer, а висит дольше обычного. Я его добиваю по kill -12
-
Периодически поступают жалобы на невозможность пользоваться интернетом. Авторизатор нормально подключается и отключается, но скрипты не отрабатываются. Лог подключений абонента не меняется и выглядит так: ... D 2008.12.08-19.30.03 192.168.8.231 29.032278 C 2008.12.08-19.30.08 192.168.8.231 29.032278 D 2008.12.08-22.54.43 192.168.8.231 29.032278 C 2008.12.10-15.05.08 192.168.8.231 22.580666 D 2008.12.10-16.45.45 192.168.8.231 22.580666 C 2008.12.10-19.23.34 [inet_ntoa error] 22.580666 Последняя строка сигнализирует об ошибке, которая лечится только перезапуском сервера. Есть лекарство?
-
в конечном итоге я пришел к следующему пути решения задач снятия АП: отказатся полностью от снятия АП настройкой тарифов и снимать своими скриптами, в нужное время, нужным пользователям, по нужным условиям.
-
хороший вопрос. я его решил так: $uid=0; @ul=`ls -lf /usr/stg/var/users/ | grep drw `; foreach $line (@ul) { ... print UNM "$line---$uid\n"; $uid=$uid + 1; } этот перл скрип создает файл с именами и номерами пользователей, а впоследствии такой файл используется в других скриптах. ИД пользователя меняется лишь в случае удаления других пользователей. Как можно заметить, ИД есть последовательный номер папки в файловой системе
-
еще момент(немного не по теме): если FullFee=yes , то абонка снимается невзирая на заморозку
-
...при наличии более чем одного направления, вариант с мегабайтами уже не работает, нужно иметь количество абонплат по количеству направлений...
-
прикольный вариант с мегабайтами! а со скриптами всё же неувязочка выходит: когда пользователя заморозит, то он не сможет подключится и увидеть сколько он должен (при наличии кредита), так что вариант с unixway тут не катит
-
такая же байда у абонента. Тоже сталкивался, но оч.давно. Возможно вирус в код внедряется? Мысли есть?
-
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
патч работает, спасибо! -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
Привет всем. После моего костыля наблюдаю что абонент не может теперь отключиться. В конфигураторе подключен, в фаерволе открыт, а подключить авторизатор не может. Блин, я уже готов 2.405 попробовать, а патч не становится, грит # patch < patch1 Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |Index: projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp |=================================================================== |RCS file: /cvsroot/stargazer/stargazer/plugins/authorization/inetaccess/inetaccess.cpp,v |retrieving revision 1.57 |diff -u -B -u -8 -p -r1.57 inetaccess.cpp |--- projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp 30 Mar 2008 13:51:31 -0000 1.57 |+++ projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp 14 Aug 2008 13:43:20 -0000 -------------------------- Patching file projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp using Plan A... patch: **** malformed patch at line 9: return freeMbShowType; пропатчил вручную... -
непонятная ситуация у меня. добавил второй сенсор, изменил конфиг <Module cap_netflow> #UseTcp=0 UseUdp=1 #TcpPort=9996 UdpPort=4440 SensorIP=127.0.0.1 SensorIP=192.168.10.5 </Module> фаервол открыт, пакеты на входе идут Source Destination Protocol Size CPS ───────────────────────────────────────────────────────────────────────────────────────────────── 192.168.10.4,54754 192.168.10.5,4440 udp 40K 5944 старгез считает на 127.0.0.1 и не считает на 192.168.10.5 - разобрался. адрес сенсора надо указывать, а не адрес интерфейса где слушать...
-
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
после того как я себя пропатчил, а это уже больше 10 дней, проблема встретилась один раз, тогда как ранее это повторялось как минимум раз в 3-4 дня. всё же мой костыль, по моему, решает траблу в большей части. Поживем, посмотрим... Кстати у меня 2.404, мож в этом дело? -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
да, точно, ситуация повторяется... -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
действительно, интересно... еслибы раз залип, то надолго... тут такое дело - этот юзер вообще не подключается, ему похоже фаервол мешает. у нас много меньше за последние несколько дней я так спокойно еще никогда себя не чувствовал простой патч для исправления этого бага - вписать в ...argazer/plugins/authorization/inetaccess/inetaccess.cpp в процедуру ::Timeouter строчку int AUTH_IA::Timeouter() { STG_LOCKER lock(&mutex, __FILE__, __LINE__); map<uint32_t, IA_USER>::iterator it; it = ip2user.begin(); uint32_t sip; //UTIME rz; //printfd(__FILE__, "ip2user.size=%d \n", ip2user.size()); while (it != ip2user.end()) { sip = it->first; if (it->second.phase == 0) it->second.phase = 1; static UTIME currTime; gettimeofday(&currTime, NULL); [b]if (currTime < it->second.phaseTime) { it->second.phaseTime=currTime; //#ifdef IA_DEBUG printfd(__FILE__, "Bad phasetime value - corrected\n"); //#endif }[/b] if (it->second.phase == 2) -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
насчет include/utime.h у него размер 3144байт, идет в дистрибутивах, которые я качаю уже не одну версию. Сомневаюсь чтобы мне "достался непофикшенный вариант", хотя... да вот собственно и он: # cat utime.h #ifndef UTIME_H #define UTIME_H /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * Date: 22.12.2007 */ /* * Author : Boris Mikhailenko <stg34@stargazer.dp.ua> */ /* $Revision: 1.2 $ $Date: 2008/01/05 23:37:58 $ $Author: faust $ */ #include <sys/time.h> #include <time.h> struct UTIME: public timeval { UTIME() { tv_sec = 0; tv_usec = 0; } UTIME(time_t t) { tv_sec = t; tv_usec = 0; } UTIME(long long a, long long { tv_sec = a; tv_usec = b; } bool operator<(const UTIME & rhs) const { if (tv_sec < rhs.tv_sec) return true; else if (tv_sec > rhs.tv_sec) return false; else if (tv_usec < rhs.tv_usec) return true; return false; } bool operator<=(const UTIME & rhs) const { if (tv_sec < rhs.tv_sec) return true; else if (tv_sec > rhs.tv_sec) return false; else if (tv_usec < rhs.tv_usec) return true; else if (tv_usec > rhs.tv_usec) return false; return true; } bool operator>(const UTIME & rhs) const { if (tv_sec > rhs.tv_sec) return true; else if (tv_sec < rhs.tv_sec) return false; else if (tv_usec > rhs.tv_usec) return true; return false; } bool operator>=(const UTIME & rhs) const { if (tv_sec > rhs.tv_sec) return true; else if (tv_sec < rhs.tv_sec) return false; else if (tv_usec > rhs.tv_usec) return true; else if (tv_usec < rhs.tv_usec) return false; return true; } bool operator==(const UTIME & rhs) const { //cout << tv_sec << "." << tv_usec << " " << rhs.tv_sec << "." << rhs.tv_usec << endl; //cout << (tv_sec == rhs.tv_sec) << " " << (tv_usec == rhs.tv_usec) << endl; return (tv_sec == rhs.tv_sec) && (tv_usec == rhs.tv_usec); } UTIME operator+(const UTIME & rhs) { // TODO optimize long long a, b; a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; tv_sec = (a + / 1000000; tv_usec = (a + % 1000000; return UTIME((a + / 1000000, (a + % 1000000); } UTIME operator-(const UTIME & rhs) { // TODO optimize long long a, b; a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; return UTIME((a - / 1000000, (a - % 1000000); } }; #endif //UTIME_H -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
дело в том что я сижу уже на немного измененном таймаутере, исходя из предположения что сбивается временная метка: if (it->second.phase == 2) { rz= currTime - it->second.phaseTime; printfd(__FILE__, "Phase2.user %s curtime-2ndtime %d, udelay %d \n" , it->second.user->GetLogin().c_str() , rz.tv_sec , iaSettings.GetUserDelay() ); if ( (currTime - it->second.phaseTime) > iaSettings.GetUserDelay() || (currTime - it->second.phaseTime) < 0 ) { if ((currTime - it->second.phaseTime) < 0 ) { printfd(__FILE__, "Phase2. LOWER ZERO VALUE \n" ); } else { printfd(__FILE__, "Phase2. BIGGER THAT ZERO VALUE \n" ); } it->second.phase = 1; т.е. если it->second.phaseTime слишком велик, то мы должны получить отсчет таймаута меньший чем 0 и в старом варианте очень долго достигать значения 15 секунд, а в новом - сразу переходить в фазу 1. Это самое я и пронаблюдал вчера неоднократно: inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 15:07:08 > Phase2.user Plan curtime-2ndtime -4280, udelay 15 inetaccess.cpp > 15:07:08 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 15:07:08 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 18:41:41 > Phase2.user Kukushata curtime-2ndtime 1, udelay 15 inetaccess.cpp > 18:41:41 > Phase2.user Kukushata curtime-2ndtime -4293, udelay 15 inetaccess.cpp > 18:41:41 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 18:41:41 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 19:53:15 > Phase2.user FeratX curtime-2ndtime 10, udelay 15 inetaccess.cpp > 19:53:15 > Phase2.user Plan curtime-2ndtime 11, udelay 15 inetaccess.cpp > 19:53:15 > Phase2.user FeratX curtime-2ndtime -4284, udelay 15 inetaccess.cpp > 19:53:15 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 19:53:15 > Phase changed from 2 to 1. Reason: timeout inetaccess.cpp > 19:53:15 > Phase2.user Plan curtime-2ndtime -4283, udelay 15 inetaccess.cpp > 19:53:15 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 19:53:15 > Phase changed from 2 to 1. Reason: timeout ..... inetaccess.cpp > 21:04:46 > Phase2.user Galas curtime-2ndtime 3, udelay 15 inetaccess.cpp > 21:04:46 > Phase2.user Galas curtime-2ndtime -4291, udelay 15 inetaccess.cpp > 21:04:46 > Phase2. LOWER ZERO VALUE inetaccess.cpp > 21:04:46 > Phase changed from 2 to 1. Reason: timeout ... -
один из пользователей не может подключиться
тема ответил в napTu пользователя napTu в Питання по Stargazer
в таймаутере всё в порядке. принимаем пакет от пользователя, переводим в фазу 2 и отправляем пакет: inetaccess.cpp > 20:46:25 > recv from 192.168.10.217 5554 len=64 inetaccess.cpp > 20:46:25 > User Plan FOUND! inetaccess.cpp > 20:46:25 > ======================> InitEncrypt dont needed inetaccess.cpp > 20:46:25 > User Plan phase changed from 1 to 2 inetaccess.cpp > 20:46:25 > Phase changed from 1 to 2 inetaccess.cpp > 20:46:25 > 1215884811.7439 192 bytes sent to 192.168.10.217:5555 len=192 далее таймаутер отсчитывает время, периодически принимаются пакеты от пользователя, но отбрасываются по фазе 2: inetaccess.cpp > 20:46:31 > Phase2.user Plan curtime-2ndtime 6, udelay 15 inetaccess.cpp > 20:46:31 > recv from 192.168.10.217 5554 len=64 inetaccess.cpp > 20:46:31 > User Plan FOUND! inetaccess.cpp > 20:46:31 > ======================> InitEncrypt dont needed inetaccess.cpp > 20:46:31 > User Plan phase not1 and not3 - return from CONN_SYN_6. phase 2 таймаутер отсчитывает до 15 секунд и переводит назад в фазу 1 inetaccess.cpp > 20:46:40 > Phase2.user Plan curtime-2ndtime 14, udelay 15 inetaccess.cpp > 20:46:40 > Phase2.user Plan curtime-2ndtime 15, udelay 15 inetaccess.cpp > 20:46:40 > Phase2. BIGGER THAT ZERO VALUE inetaccess.cpp > 20:46:40 > Phase changed from 2 to 1. Reason: timeout сейчас проблему наблюдаю у двух пользователей. куда копать не понимаю... странно, но перезапуск сервера не изменил ситуацию. возможно это у них с фаерволом проблема. всё же ситуация не вчерашняя, тогда не было фазопереходов. жду дальше...
