Чтоб не мучать ~Asmodeus~, вопросы и пожелания направляйте сразу мне:
Патч создавался для подсчёта траффика, проходящего через pppd по зонам IPv4 адресов:
Для работы необходимы:
# define lib_log_trace(fmt, args…) printk(KERN_INFO fmt, args)
на #define lib_log_trace(fmt, args…)
После загрузки модуля ppp_generic или загрузки ядра (если поддержка PPP вкомпилена в ядро) должен появится файл /proc/ipv4zones
. Если его нет, значит либо ядро собрано без патча, либо не загружен модуль. Данный файл - канал для конфигурирования зон. Для конфигурирования используются бинарные пакеты, следовательно необходима утилита. Утилиту брать на SourceForge, там же где и всё остальное.
Для сборки и работы необходима библиотека libxml2, правильно прописанная в pkgconfig. Сборка осуществляется командой make :)
В каталоге с утилитой лежит config.xml - пример конфигурации. Его нужно подправить под конкретные нужды.
Для изменения конфигурации зон необходимо выполнить:
./config_parser config.xml
!!! Внимание !!! Сейчас пока config_parser выводит много отладочной информации в stdout, ошибки выводятся в stderr. Но в любом случае просмотрите чего написал config_parser - вдруг там будет сообщение об ошибке?
/ System configuration/ NAS/ Выставить тип leppd:Linux PPPD IPv4 zone counters
PPPD теперь будет дополнительно отправлять такие аттрибуты по accounting types Stop и Interim-Update (все счётчики относительно интерфейса):
PPPD-Output-Packets-Zones-0
- количество пакетов, которые pppd отправил пользователю.PPPD-Input-Packets-Zones-0
- количество пакетов, которые pppd принял от пользователя.PPPD-Output-Octets-Zones-0
- количество байт, которые pppd отправил пользователю.PPPD-Input-Octets-Zones-0
- количество байт, которые pppd принял от пользователя.и также для остальных зон. Если зон больше 4-х, нужно поправить dictionary.pppd и прописать дополнительные зоны.
!!! Внимание !!! Если у вас много зон (зон тарификации, а не разных IP адресов, которые вы включаете в зоны), лучше пользуйтесь Ipn - он предназначен именно для таких случаев.
rad_recv: Accounting-Request packet from host 192.168.254.2:2048, id=189, length=316 Acct-Session-Id = "4490620615B3" User-Name = "stas" Acct-Status-Type = Interim-Update Service-Type = Framed-User Framed-Protocol = PPP Acct-Authentic = RADIUS Acct-Session-Time = 2225 Acct-Output-Octets = 222 Acct-Input-Octets = 894 Acct-Output-Packets = 5 Acct-Input-Packets = 13 PPPD-Output-Packets-Zones-0 = 0 PPPD-Input-Packets-Zones-0 = 4 PPPD-Output-Octets-Zones-0 = 0 PPPD-Input-Octets-Zones-0 = 328 PPPD-Output-Packets-Zones-1 = 2 PPPD-Input-Packets-Zones-1 = 6 PPPD-Output-Octets-Zones-1 = 168 PPPD-Input-Octets-Zones-1 = 492 PPPD-Output-Packets-Zones-2 = 0 PPPD-Input-Packets-Zones-2 = 0 PPPD-Output-Octets-Zones-2 = 0 PPPD-Input-Octets-Zones-2 = 0 PPPD-Output-Packets-Zones-3 = 0 PPPD-Input-Packets-Zones-3 = 0 PPPD-Output-Octets-Zones-3 = 0 PPPD-Input-Octets-Zones-3 = 0 NAS-Port-Type = Async Framed-IP-Address = 192.168.253.1 NAS-IP-Address = 127.0.0.1 NAS-Port = 0 Acct-Delay-Time = 0
rad_recv: Accounting-Request packet from host 192.168.254.2:2048, id=190, length=316 Acct-Session-Id = "4490620615B3" User-Name = "stas" Acct-Status-Type = Stop Service-Type = Framed-User Framed-Protocol = PPP Acct-Authentic = RADIUS Acct-Session-Time = 2263 Acct-Output-Octets = 222 Acct-Input-Octets = 894 Acct-Output-Packets = 5 Acct-Input-Packets = 13 PPPD-Output-Packets-Zones-0 = 0 PPPD-Input-Packets-Zones-0 = 4 PPPD-Output-Octets-Zones-0 = 0 PPPD-Input-Octets-Zones-0 = 328 PPPD-Output-Packets-Zones-1 = 0x00000002 PPPD-Input-Packets-Zones-1 = 0x00000006 PPPD-Output-Octets-Zones-1 = 0x000000a8 PPPD-Input-Octets-Zones-1 = 0x000001ec PPPD-Output-Packets-Zones-2 = 0 PPPD-Input-Packets-Zones-2 = 0 PPPD-Output-Octets-Zones-2 = 0 PPPD-Input-Octets-Zones-2 = 0 PPPD-Output-Packets-Zones-3 = 0 PPPD-Input-Packets-Zones-3 = 0 PPPD-Output-Octets-Zones-3 = 0 PPPD-Input-Octets-Zones-3 = 0 NAS-Port-Type = Async Framed-IP-Address = 192.168.253.1 NAS-IP-Address = 127.0.0.1 NAS-Port = 0 Acct-Delay-Time = 0
Возможно, лучшим выходом будет использование VSA - Vendor Specific Attributes. Например, так:
RADIUS пакет с VSA (в текстовом или бинарном виде)
Встретил упоминание о POD - Packet of Disconnect. Надо посмотреть, чего можно вытянуть из RFC 3576 - Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)