Поддержка CoA/DR для pppd

Ответить
NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Поддержка CoA/DR для pppd

Сообщение NiTr0 » Сб апр 17, 2010 9:05 pm

Собссно сваял за недельку демон для поддержки сабжа, ну и патч для pppd (пока - в зачаточном состоянии, умеет всего лишь вызывать по SIGUSR1 if-mod скрипт - воззможно, допилю позже изменение session-octets-limit и session-timeout, хотя стоит ли?).

Сам демон умеет:
  • определять интерфейс по Framed-IP-Address, Framed-Protocol+Nas-Port, или по Nas-Port-ID (если указано несколько аттрибутов - проверяет их соответствие друг другу);
  • править radattr.pppX исходя из свежеполученных аттрибутов для CoA;
  • отправлять нужному процессу SIGUSR1 для СоА или SIGHUP для DR.
Из минусов - pppd лишился возможности включать/отключать дебаг посылкой SIGUSR1 (а оно кому-то нужно?).

Стянуть сабж + патч можно здесь. Документации нет, кому нужен список опций - может обратиться к оному из radiusd-cistron (который собссно и послужил основой, подвергнувшись кастрации явно лишнего для данной задачи). Статус - бета-версия, т.к. смахивает на законченный продукт и на первый взгляд работает, но толком не тестировалась. Ессно, идет как "as-is".

Багрепорт/фиксы - приветствуются. Разжевывать, как пользоваться и зачем надо вообще - не буду, ибо кому это нужно - ИМХО поймут сами, а кому не нужно - разжевывать смысла не вижу.

P.S. И было бы неплохо, чтобы кто-то добавил адекватную поддержку этой фичи биллингом - в идеале, проверка в billd/radacct необходимости смены скорости/разрыва сессии, и собссно выполнение нужной операции; если желающих не найдется - прийдется самому пилить...

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Re: Поддержка CoA/DR для pppd

Сообщение Abram » Вс апр 18, 2010 10:05 am

А почему не умеем по Acct-Session-Id искать? Так же интересней намного.

Для пиналки на первое время можно взять вот это:
viewtopic.php?p=21328#p21328

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Поддержка CoA/DR для pppd

Сообщение NiTr0 » Вс апр 18, 2010 10:09 am

Acct-Session-Id надо откуда-то получать, откуда его (кроме как из недр pppd) получить - я не представляю. А опрашивать каждый процесс - ИМХО гиморно; вынос его в radacct и последующий парсинг - тоже гиморно...

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Поддержка CoA/DR для pppd

Сообщение NiTr0 » Вт апр 20, 2010 7:44 pm

Поправил мелкий баг. При форке демон пытался закрыть stdin и подсунуть вместо него /dev/null - что по непонятным причинам вызывало отжирание демоном 100% процессорного времени, но при этом он вроде как функционировал правильно. Остается только догадываться, как это работало раньше, и почему поломалось...

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Поддержка CoA/DR для pppd

Сообщение NiTr0 » Чт апр 22, 2010 4:06 pm

Желающих допилить billd/racct.pl не возникло - значит, выкладываю патч для ветки 0.42. Вроде как должен работать, дисконнект делает, запустил на обкатку на тестовом насе.
В конфиг добавить:

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

$conf{coa_send}=1;
$conf{billd_interval}=300; #sec
UPD:
прикрепил новую версию, с поправленными багами, и доработанными мелочами (так, в СоА передается не только номер порта, но и IP - для исключения ошибочной смены скорости, к примеру, в ночь 1-го числа каждого месяца).
Вложения
coa.patch.gz
(4.93 КБ) 264 скачивания
Последний раз редактировалось NiTr0 Пт май 21, 2010 4:44 pm, всего редактировалось 1 раз.

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: Поддержка CoA/DR для pppd

Сообщение NiTr0 » Пн апр 26, 2010 10:28 am

Поправил баг со 100% загрузкой проца демоном. Новая версия - на сорсфорже.

skillman
Сообщения: 68
Зарегистрирован: Вт сен 13, 2011 8:04 am
Контактная информация:

Re: Поддержка CoA/DR для pppd

Сообщение skillman » Чт ноя 10, 2011 9:52 pm

Может стоит разжевать более детально?
В общих чертах понятно. Хотелось бы использовать ваши наработки с вашего позволения естественно

Ответить