Перейти к содержимому
Калькуляторы

SNeon

Пользователи
  • Публикации

    20
  • Зарегистрирован

  • Посещение

О SNeon

  • Звание
    Абитуриент
  • День рождения 08.10.1981

Контакты

  • ICQ
    77736610

Информация

  • Пол
    Мужчина

Город

  • Город
    Харьков, Украина
  1. ISG в Linux

    Думаю можно реализовать так-же как и 1-to-1 NAT. При помощи добавления правил в -t nat из perl скрипта Попробую вечерком поколдовать на эту тему
  2. ISG в Linux

    Патч на динамическое распределение на подсети по атрибуту Framed-IP-Netmask (атрибут можно изменить в конфиге, опция $cfg{network_ident}. Атрибут должен быть типа ipaddr (см. в файле dictionary) Сессию запускает первый обратившийся IP из подсети. С-но логин/пароль будет этот же IP. Вся статистика будет также идти от этого IP. Но полиситься и учитываться будет вся подсеть. Если Framed-IP-Netmask не указан, то считается что маска 255.255.255.255 (то есть 1 IP) Это АЛЬФА версия патча на голую версию http://bitbucket.org/sysoleg/lisg/get/tip.tar.gz Альфа, потому как не тестировал сервисы и классы. Есть мнение, работать будет, но тестировать негде т.к. у меня не используется. Эта версия уже трудится 4 часа. Мин нет. Кому не страшно - тестируйте и отписывайте. в iptables ничего не изменилось в конфиг добавлена опция $cfg{network_ident} = "Framed-IP-Netmask"; изменены файлы: ./ISG/bin/ISG.pl ./ISG/bin/ISGd.pl ./lib/ISG.pm ./kernel/isg_main.c ./kernel/isg_main.h так что потребуется пересборка модуля ядра, перезапись поверх библиотеки, демона и управляющей программы. перезагрузка модуля, перезапуск демона diff -ruN lisg/ISG/bin/ISGd.pl lisg-framed-net/ISG/bin/ISGd.pl --- lisg/ISG/bin/ISGd.pl 2010-10-02 22:10:08.000000000 +0300 +++ lisg-framed-net/ISG/bin/ISGd.pl 2011-01-16 15:05:58.957575888 +0200 @@ -287,6 +287,7 @@ $oev->{'alive_interval'} = defined($alive_interval) ? $alive_interval : $cfg{session_alive_interval}; $oev->{'max_duration'} = defined($max_duration) ? $max_duration : $cfg{session_max_duration}; $oev->{'idle_timeout'} = defined($idle_timeout) ? $idle_timeout : $cfg{idle_timeout}; + $oev->{'ipnetmask'} = ISG::ip2long($rp->attr(defined($cfg{network_ident}) ? $cfg{network_ident} : 'Framed-IP-Netmask')); if (defined($speed_info) && $speed_info =~ /^(\d{1,})\/(\d{1,})$/) { $oev->{'in_rate'} = $2 * 1000; diff -ruN lisg/ISG/etc/config.pl lisg-framed-net/ISG/etc/config.pl --- lisg/ISG/etc/config.pl 2010-10-02 22:10:08.000000000 +0300 +++ lisg-framed-net/ISG/etc/config.pl 2011-01-16 15:05:58.972575673 +0200 @@ -35,6 +35,9 @@ ### Check traffic classification file MD5 sum every N seconds. If sum was changed re-read this file. $cfg{tc_check_interval} = 300; ## Every 5 minutes +### Network identifier. Param from dictionary. Type is ipaddr. Default - Framed-IP-Netmask +$cfg{network_ident} = "Framed-IP-Netmask"; + ####################### Services description ####################### ### Begin ``TESTSERV'' service ### diff -ruN lisg/ISG/lib/ISG.pm lisg-framed-net/ISG/lib/ISG.pm --- lisg/ISG/lib/ISG.pm 2010-10-02 22:10:08.000000000 +0300 +++ lisg-framed-net/ISG/lib/ISG.pm 2011-01-16 15:05:58.981575546 +0200 @@ -22,7 +22,7 @@ use constant NLMSG_ALIGNTO => 4; use constant NLMSG_DONE => 0x3; use constant NLM_F_MULTI => 0x2; -use constant IN_EVENT_MSG_LEN => 140; +use constant IN_EVENT_MSG_LEN => 148; use constant EVENT_LISTENER_REG => 0x01; use constant EVENT_SESS_APPROVE => 0x04; @@ -178,6 +178,8 @@ $pars->{'session_id'} = ""; $pars->{'ipaddr'} = 0; + $pars->{'ipnetwork'} = 0; + $pars->{'ipnetmask'} = 4294967295; $pars->{'nat_ipaddr'} = 0; $pars->{'port_number'} = 0; $pars->{'flags'} = 0; @@ -220,10 +222,12 @@ } else { - return pack("I a8 N2 H12 v I8 a32 C", + return pack("I a8 N4 H12 v I8 a32 C", $pars->{'type'}, $pars->{'session_id'}, $pars->{'ipaddr'}, + $pars->{'ipnetwork'}, + $pars->{'ipnetmask'}, $pars->{'nat_ipaddr'}, 0, # MAC-Address is read-only $pars->{'flags'}, @@ -255,6 +259,8 @@ $session_id_hi, $session_id_lo, $pars->{'ipaddr'}, + $pars->{'ipnetwork'}, + $pars->{'ipnetmask'}, $pars->{'nat_ipaddr'}, $pars->{'macaddr'}, $pars->{'flags'}, @@ -279,7 +285,7 @@ $p_session_id_hi, $p_session_id_lo, $pars->{'service_name'} - ) = unpack("I I2 N2 H12 v I8 I i I10 a32", shift); + ) = unpack("I I2 N4 H12 v I8 I i I10 a32", shift); $pars->{'service_name'} =~ s/\000//g; if (!length($pars->{'service_name'})) { diff -ruN lisg/kernel/isg_main.c lisg-framed-net/kernel/isg_main.c --- lisg/kernel/isg_main.c 2010-10-02 22:10:08.000000000 +0300 +++ lisg-framed-net/kernel/isg_main.c 2011-01-16 15:05:58.982575531 +0200 @@ -491,6 +491,8 @@ } is->info.ipaddr = ipaddr; + is->info.ipnetwork = ipaddr; + is->info.ipnetmask = 0xFFFFFFFFL; is->start_ktime = ts_now.tv_sec; is->isg_net = isg_net; @@ -556,6 +558,9 @@ is->info.out_rate = ev->si.sinfo.out_rate; is->info.out_burst = ev->si.sinfo.out_burst; + is->info.ipnetmask = ev->si.sinfo.ipnetmask; + is->info.ipnetwork = (is->info.ipnetmask & is->info.ipaddr); + if (ev->si.sinfo.nat_ipaddr) { is->info.nat_ipaddr = ev->si.sinfo.nat_ipaddr; } @@ -674,14 +679,17 @@ } static inline struct isg_session *isg_lookup_session(struct isg_net *isg_net, u_int32_t ipaddr) { + unsigned int i; struct isg_session *is; struct hlist_node *n; - unsigned int h = get_isg_hash(ipaddr); +// unsigned int h = get_isg_hash(ipaddr); - hlist_for_each_entry(is, n, &isg_net->hash[h], list) { - if (is->info.ipaddr == ipaddr) { - return is; - } + for (i = 0; i < nr_buckets; i++) { + hlist_for_each_entry(is, n, &isg_net->hash[i], list) { + if (is->info.ipnetwork == (ipaddr & is->info.ipnetmask)) { + return is; + } + } } return NULL; @@ -690,7 +698,7 @@ static inline int isg_equal(struct isg_in_event *ev, struct isg_session *is) { if ((ev->si.sinfo.id && ev->si.sinfo.id == is->info.id) || (is->info.port_number == ev->si.sinfo.port_number) || - (is->info.ipaddr == ev->si.sinfo.ipaddr)) { + (is->info.ipnetwork == (is->info.ipnetmask & ev->si.sinfo.ipaddr))) { return 1; } else { return 0; diff -ruN lisg/kernel/isg_main.h lisg-framed-net/kernel/isg_main.h --- lisg/kernel/isg_main.h 2010-10-02 22:10:08.000000000 +0300 +++ lisg-framed-net/kernel/isg_main.h 2011-01-16 15:05:58.983575515 +0200 @@ -83,6 +83,8 @@ u_int64_t id; u_int32_t ipaddr; /* User's IP-address */ + u_int32_t ipnetwork; /* User's NetWork */ + u_int32_t ipnetmask; /* User's NetMask */ u_int32_t nat_ipaddr; /* User's 1-to-1 NAT IP-address */ u_int8_t macaddr[ETH_ALEN]; /* User's MAC-address */
  3. ISG в Linux

    Именно! Уже заканчиваю реализацию. Днем поставлю на тест. Для каждой авторизованной сессии будет держаться связка сеть/маска. пакеты будут сравниваться так: сеть == IP & маска. на всю подсеть 1 сессия. Но инициализированная по любому IP. Билинг уже перековырял =)
  4. ISG в Linux

    уговорили ) сделаю под Framed-Netmask =) Не обещаю, что скоро. Пока продумываю алгоритм
  5. ISG в Linux

    но мы же не знаем какая маска. у нас всё с точностью до наоборот! известен IP а надо подобрать ему в базе соответствующую маску же!
  6. ISG в Linux

    Каким запросом, зная только IP, получить из базы маску? Многие ли билинги это умеют? допустим в базе есть запись с логином 10.0.0.0. для этого логина я хочу сеть /29. Т.е. будет еще поле для Framed-Netmask = 255.255.255.248 как теперь это всё провернуть, если подключается клиент с IP 10.0.0.5 ?
  7. ISG в Linux

    как об этом уведомить ISG? Ведь хочется ж одним правилом в iptables оседлать и /24 и /30 и /32 Проблема в том, что запрос логин-пароль (IP-IP) идут раньше, чем назначения подсетей из билинга Ну подумайте сами. клиент ломится в инет. что мы о нем можем узнать? IP? Да, только его IP. Сеть он не передает. Как узнать его сеть? Только спросить у билинга, через IP. А для этого и надо держать 254 IP для /24 Теперь: как опросив логин (а именно IP, а он же может быть любой из диапазона) вычислить нужный шейпер? юзабельно, только вот вопросы выше...
  8. ISG в Linux

    Де дело в том, что от ISG не придет Framed-IP-Netmask с самого начала, ибо ISG не знает как бить сети. Допустим нет ни одной сессии. Допустим надо полисить сеть 1.0.0.0/24 Теперь приходит клиент и включает камп: Идет auth-request примерно следующего типа логин: 1.0.0.24 пароль: 1.0.0.24 id: random port: первый свободный и вот как ему назначить сеть? а логин и пароль нужен в билинге, иначе как идентифицировать? ISG в запросе не может передать сеть! никак! он же не знает того, что знает билинг!!! дальше: допустим билинг ответил ацептом (по связке IP-пароль). Выдал атрибуты... .... Framed-IP-Netmask .... и как с атриутом дальше поступить? а теперь допустим, что первым включили камп с IP 1.0.0.21... мысли? а теперь случай - уже зареган 1.0.0.24. А тут запрос от 1.0.0.98 Чо дальше делать? Как отчитаться radius о клиентах?
  9. ISG в Linux

    Framed-IP-Netmask несколько не для этого. Но боком прикрутить можно. А зачем он в CoA? Сессия то все равно одна будет для всей подсети. Вот этой сессии и подавать CoA по ID, опираясь на Online в билинге. А вот те, у кого radius/билинг шлет по умолчанию этот параметр, будут неприятно удивлены поведением. А хотя нет. Не одна сессия будет. Ведь запустить сессию может любой IP, а только потом в ISG придет атрибут Framed-IP-Netmask. А значит для сети /24 в базе билинга придется держать 254 логина. Тогда уже логичней будет считать все сессии в отдельности, и держать отдельный счетчик всей подсети в ядре для полисинга. Или же использовать общий счетчик через указатель. но тогда у всех активных сессий в билинге будут одинаковые счетчики трафика. В общем пока не ясно, как проще. Предлагайте
  10. ISG в Linux

    Тогда надо придумать алгоритм. что будет посылать радиус(билинг) и каким образом на это реагировать. когда я раньше поднимал этот вопрос, ответ сводился к одному - не заводить кучу правил в iptables под разные нужды. А следовательно информацию надо брать либо из конфига либо из билинга. Предлагайте варианты - сделаем. Мне нужно было как минимум побить подсеть на сети класса С и подсеть на сети /30. Теперь 4 правила в iptables с этим справляются. Патч писал ночью от бессонницы и скуки. Для начала чтоб хотя бы разобраться с кодом (комментариев в нем к сожалению очень мало).
  11. ISG в Linux

    Не спалось. За пару часов накидал патч для учета и полисинга подсетей. Естественно придется пересобрать модули iptables и ядра. Не забыть перезагрузить модуль ядра. В цепочку FORWARD в оба правила (-s и -d) добавить в конец параметр --init-net например: -A FORWARD -s 192.168.0.0/16 -j ISG --session-init --init-net 24 -A FORWARD -d 192.168.0.0/16 -j ISG --init-net 24 Это разобъет всю сеть 192.168.0.0/16 на подсети /24 Логины и пароли с-но будут 192.168.0.0, 192.168.1.0 ... 192.168.254.0 можно бить на любые подсети, хоть /31 использую вот эту версию http://bitbucket.org/sysoleg/lisg/get/tip.tar.gz diff -ruN lisg-oct-2-neon/kernel/isg_main.c lisg-oct-2-neon-net/kernel/isg_main.c --- lisg-oct-2-neon/kernel/isg_main.c 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon-net/kernel/isg_main.c 2011-01-11 07:44:46.500072709 +0200 @@ -477,7 +477,7 @@ return 1; } -static struct isg_session *isg_create_session(struct isg_net *isg_net, u_int32_t ipaddr, u_int8_t *src_mac) { +static struct isg_session *isg_create_session(struct isg_net *isg_net, u_int32_t ipaddr, u_int8_t *src_mac, u_int32_t init_net) { struct isg_session *is; unsigned int port_number; struct timespec ts_now; @@ -493,6 +493,7 @@ is->info.ipaddr = ipaddr; is->start_ktime = ts_now.tv_sec; is->isg_net = isg_net; + is->init_net = init_net; port_number = find_next_zero_bit(isg_net->port_bitmap, PORT_BITMAP_SIZE, 1); set_bit(port_number, isg_net->port_bitmap); @@ -690,7 +691,7 @@ static inline int isg_equal(struct isg_in_event *ev, struct isg_session *is) { if ((ev->si.sinfo.id && ev->si.sinfo.id == is->info.id) || (is->info.port_number == ev->si.sinfo.port_number) || - (is->info.ipaddr == ev->si.sinfo.ipaddr)) { + (is->info.ipaddr == ((is->init_net) ? (ev->si.sinfo.ipaddr & is->init_net) : ev->si.sinfo.ipaddr))) { return 1; } else { return 0; @@ -964,6 +965,7 @@ struct nehash_entry *ne; struct traffic_class **tc_list; __be32 laddr, raddr; + u_int32_t init_net = 0; struct isg_net *isg_net; u_int32_t pkt_len, pkt_len_bits; @@ -998,6 +1000,12 @@ raddr = iph->saddr; } + if (iinfo->flags & INIT_NET) { /* Init NET */ + init_net = htonl(0xFFFFFFFF << (32 - iinfo->init_net)); + laddr &= init_net; + raddr &= init_net; + } + is = isg_lookup_session(isg_net, laddr); if (is == NULL) { @@ -1010,7 +1018,7 @@ } } - isg_create_session(isg_net, laddr, src_mac); + isg_create_session(isg_net, laddr, src_mac, init_net); } else if (isg_net->pass_outgoing) { goto ACCEPT; } diff -ruN lisg-oct-2-neon/kernel/isg_main.h lisg-oct-2-neon-net/kernel/isg_main.h --- lisg-oct-2-neon/kernel/isg_main.h 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon-net/kernel/isg_main.h 2011-01-11 06:47:54.342145989 +0200 @@ -21,6 +21,7 @@ #define INIT_SESSION 0x01 #define INIT_BY_SRC 0x02 #define INIT_BY_DST 0x04 +#define INIT_NET 0x08 #define ISG_DIR_IN 0x01 #define ISG_DIR_OUT 0x02 @@ -77,6 +78,7 @@ struct ipt_ISG_info { u_int8_t flags; + u_int8_t init_net; /* Init NETWORK */ }; struct isg_session_info { @@ -119,6 +121,8 @@ u_int64_t in_last_seen; u_int64_t out_last_seen; + u_int32_t init_net; /* Init NETWORK */ + time_t start_ktime; time_t last_export; diff -ruN lisg-oct-2-neon/kernel/libipt_ISG.c lisg-oct-2-neon-net/kernel/libipt_ISG.c --- lisg-oct-2-neon/kernel/libipt_ISG.c 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon-net/kernel/libipt_ISG.c 2011-01-11 07:22:49.369311708 +0200 @@ -9,11 +9,13 @@ struct ipt_ISG_info { u_int8_t flags; + u_int8_t init_net; /* Init NETWORK */ }; static const struct option opts[] = { { "session-init", 0, NULL, '1' }, { "init-mode", 1, NULL, '2' }, + { "init-net", 1, NULL, '3' }, { .name = NULL } }; @@ -24,12 +26,14 @@ " --init-mode <mode> Session initialization mode:\n" " src - use src IP-address as username\n" " dst - use dst IP-address as username\n" -" If --init-mode is not specified, `src' is assumed\n"); +" If --init-mode is not specified, `src' is assumed\n" +" --init-net Net Prefix\n"); } #define INIT_SESSION 0x01 #define INIT_BY_SRC 0x02 #define INIT_BY_DST 0x04 +#define INIT_NET 0x08 #if defined NEWSTYLE #define _EXIT_ERROR xtables_error @@ -73,6 +77,20 @@ break; + case '3': + if (*flags & INIT_NET) { + _EXIT_ERROR(PARAMETER_PROBLEM, "Can't specify --init-net twice\n"); + } + + isg->flags |= INIT_NET; + if (strlen(optarg)) { + isg->init_net = atoi(optarg); + } else { + isg->init_net = 24; + } + + break; + default: return 0; } @@ -92,6 +110,10 @@ printf("--init-mode dst"); } } + + if (isg->flags & INIT_NET) { + printf(" --init-net %d", isg->init_net); + } } static void print(const void *ip, @@ -111,6 +133,10 @@ printf("dst mode"); } } + + if (isg->flags & INIT_NET) { + printf(" net %d", isg->init_net); + } } static void check(unsigned int flags) { diff -ruN lisg-oct-2-neon/kernel/old_iptables/libipt_ISG.c lisg-oct-2-neon-net/kernel/old_iptables/libipt_ISG.c --- lisg-oct-2-neon/kernel/old_iptables/libipt_ISG.c 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon-net/kernel/old_iptables/libipt_ISG.c 2011-01-11 07:22:54.146230240 +0200 @@ -9,11 +9,13 @@ struct ipt_ISG_info { u_int8_t flags; + u_int8_t init_net; /* Init NETWORK */ }; static struct option opts[] = { { "session-init", 0, NULL, '1' }, { "init-mode", 1, NULL, '2' }, + { "init-net", 1, NULL, '3' }, { .name = NULL } }; @@ -24,12 +26,14 @@ " --init-mode <mode> Session initialization mode:\n" " src - use src IP-address as username\n" " dst - use dst IP-address as username\n" -" If --init-mode is not specified, `src' is assumed\n"); +" If --init-mode is not specified, `src' is assumed\n" +" --init-net Net Prefix\n"); } #define INIT_SESSION 0x01 #define INIT_BY_SRC 0x02 #define INIT_BY_DST 0x04 +#define INIT_NET 0x08 static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, @@ -65,6 +69,20 @@ break; + case '3': + if (*flags & INIT_NET) { + exit_error(PARAMETER_PROBLEM, "Can't specify --init-net twice\n"); + } + + isg->flags |= INIT_NET; + if (strlen(optarg)) { + isg->init_net = atoi(optarg); + } else { + isg->init_net = 24; + } + + break; + default: return 0; } @@ -84,6 +102,10 @@ printf("--init-mode dst"); } } + + if (isg->flags & INIT_NET) { + printf(" --init-net %d", isg->init_net); + } } static void print(const struct ipt_ip *ip, @@ -103,6 +125,10 @@ printf("dst mode"); } } + + if (isg->flags & INIT_NET) { + printf(" net %d", isg->init_net); + } } static void check(unsigned int flags) {
  12. ISG в Linux

    EvilShadow, уже обсуждалось. Свелось к следующему: RADIUS использует атрибуты Session-Timeout и/или Idle-Timeout? Точно стояло radius_default_session_timeout=65000. поставил на 180. сейчас проверю. Все точно, теперь нормально!. Спасибо! Пора составить небольшой FAQ
  13. ISG в Linux

    О_О это почему-же??? Наоборот! Как можно лишить себя такой полезной информации? Эммм... О L3-свитчах не слышали? Аль у вас локалка прямо через NAS бегает? если уж через L3 пускать, да еще и через циску, то зачем тогда этот проект? ;) Ессно прямо через NAS. Экономия должна быть экономной, как говорит директор =) Вся сеть сведена через .1q на soft NAS. NAS выступает таким себе 300+ портовым свитчем с ISG. Всё делалось для того, чтобы убрать VPN(pptp) но оставить мониторинг поклиентно. А тут такой прожект! Почти не надо модернизировать билинг, что удобно для мастеров и ТП. Остается гибкость радиуса и никаких допвложений в железо
  14. ISG в Linux

    Интересно, какая система и откуда тогда берется Makefile из исходников iptables??? Кому надо - может выдернуть из общего. Я же просто скинул свои поправки, которые необходимы были лично мне.Дальше тоже ковыряю и тестирую на подсети. Как будет готово - О_О это почему-же??? Наоборот! Как можно лишить себя такой полезной информации? Именно тот случай.
  15. ISG в Linux

    Предлагаю выкладывать свои патчи, с описанием. Пользуюсь Fedora 13 и 14. Полёт нормальный. Патч изменяет configure скрипт, чтобы не тянуть исходники ядра и iptables. достаточно поставить devel пакеты. Изменяет стартовый скрипт, на более подходящий для Fedora Изменяет Calling-Station-Id на формат IP - MAC Добавляет параметр конфигурации #$cfg{nas_ip} = "192.168.0.1"; ## By default equals to hostname diff -ruN lisg/ISG/bin/ISGd.pl lisg-oct-2-neon/ISG/bin/ISGd.pl --- lisg/ISG/bin/ISGd.pl 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon/ISG/bin/ISGd.pl 2010-10-27 01:41:59.501692727 +0300 @@ -46,7 +46,11 @@ exit(0); } -$nas_ip = ISG::isg_get_nas_ip(); +if (defined($cfg{nas_ip})) { + $nas_ip = $cfg{nas_ip}; +} else { + $nas_ip = ISG::isg_get_nas_ip(); +} if (!length($nas_ip)) { do_log("warning", "Unable to get my own IP-address, using 127.0.0.1"); @@ -649,7 +653,7 @@ } $p->set_attr("User-Name", $username); - $p->set_attr("Calling-Station-Id", $username); + $p->set_attr("Calling-Station-Id", $username . " - " . ISG::format_mac($ev->{'macaddr'}, 2, ":")); $p->set_attr("Service-Type", "Framed-User"); @@ -662,7 +666,7 @@ $p->set_attr("NAS-Port-Type", "Virtual"); if (defined($ev->{'macaddr'})) { - $p->set_vsattr("Cisco", "Cisco-AVPair", "client-mac-address=" . ISG::format_mac($ev->{'macaddr'}, 4)); + $p->set_vsattr("Cisco", "Cisco-AVPair", "client-mac-address=" . ISG::format_mac($ev->{'macaddr'}, 4, ".")); } if ($code eq "Accounting-Request") { diff -ruN lisg/ISG/contrib/rc.ISGd lisg-oct-2-neon/ISG/contrib/rc.ISGd --- lisg/ISG/contrib/rc.ISGd 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon/ISG/contrib/rc.ISGd 2010-08-02 15:41:42.000000000 +0300 @@ -1,44 +1,70 @@ #!/bin/sh +# +# Startup script for ISGd +# +# chkconfig: 345 86 15 +# description: ISG server +# processname: ISGd +# config: /etc/ISG/config.pl + +# Source function library. +. /etc/rc.d/init.d/functions +# Source networking configuration. +. /etc/sysconfig/network + +RETVAL=0 ulimit -n 8192 -ISGd_RUN="ISGd" +prog=ISGd ISGd_RUN="/usr/local/ISG/bin/ISGd.pl" NAME=`basename $0` -case $* in -start) +start() { + # Check that networking is up. + [ ${NETWORKING} = "no" ] && exit 1 + if pgrep -f $ISGd_RUN > /dev/null; then echo "$NAME: Already running" exit 1 fi - - echo "$NAME: Starting ISGd" - echo "1048576" > /proc/sys/net/core/rmem_max - $ISGd_RUN + # Start daemons. + echo -n $"Starting $prog: " + daemon $ISGd_RUN + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog + return $RETVAL +} + +stop() { + echo -n $"Stopping $prog: " + killproc $ISGd_RUN + RETVAL=$? + echo + [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog + return $RETVAL +} - echo "$NAME: ISGd started" +case $* in +start) + start ;; stop) - PID=`cat /var/run/ISGd.pid 2> /dev/null` - - if [ "$PID" = "" ]; then - echo "$NAME: Not running" - exit 1 - fi - - echo "$NAME: Stopping ISGd (PID $PID)" + stop + ;; - kill $PID - echo "$NAME: ISGd stopped" +restart) + stop + start ;; *) - echo "Usage: $0 {start|stop}" >&2 + echo "Usage: $0 {start|stop|restart}" >&2 exit 1 ;; esac diff -ruN lisg/ISG/etc/config.pl lisg-oct-2-neon/ISG/etc/config.pl --- lisg/ISG/etc/config.pl 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon/ISG/etc/config.pl 2010-10-27 01:42:28.928568147 +0300 @@ -13,6 +13,7 @@ $cfg{radius_auth}{0} = { server => "127.0.0.1:1812", timeout => 5, secret => "apple" }; $cfg{radius_acct}{0} = { server => "127.0.0.1:1813", timeout => 5, secret => "apple" }; +#$cfg{nas_ip} = "192.168.0.1"; ## By default equals to hostname #$cfg{nas_identifier} = "lISG"; ## By default equals to NAS IP-address ### CoA-related settings diff -ruN lisg/ISG/lib/ISG.pm lisg-oct-2-neon/ISG/lib/ISG.pm --- lisg/ISG/lib/ISG.pm 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon/ISG/lib/ISG.pm 2010-10-27 01:43:14.255692743 +0300 @@ -115,14 +115,14 @@ } sub format_mac { - my ($mac, $step) = @_; + my ($mac, $step, $dl) = @_; my @pts; for (my $i = 0; $i <= 8 && $step; $i += $step) { push(@pts, substr($mac, $i, $step)); } - return join(".", @pts); + return join($dl, @pts); } sub hex_session_id_to_llu { diff -ruN lisg/kernel/configure lisg-oct-2-neon/kernel/configure --- lisg/kernel/configure 2010-10-02 22:10:08.000000000 +0300 +++ lisg-oct-2-neon/kernel/configure 2010-11-07 23:35:31.829350555 +0200 @@ -9,9 +9,9 @@ iptables_src_version() { echo -n "Checking iptables sources version: " - SRC="$IPTSRC/Makefile" - test -s "$SRC" || error "Please build iptables first." - VER=`sed -n 's/^\(IPTABLES_\)\?VERSION[ :]= \?//p' "$SRC"` + SRC="$IPTSRC/include/iptables/internal.h" + test -s "$SRC" || error "Please build iptables or install iptables-devel first." + VER=`sed -n 's/#define IPTABLES_VERSION //p' "$SRC" | tr -d "\""` test "$VER" || error "Unknown version of iptables." if [ "$VER" = "$IPTVER" ]; then echo "$VER (ok)" @@ -106,6 +106,7 @@ try_dirg "iptables" && return 0 try_dirg "../iptables" && return 0 try_dirg "/usr/src/iptables" && return 0 + try_dirg "/usr" && return 0 error "Can not find iptables source directory, try setting it with --ipt-src=" fi }