mpd5 и учет локального трафика

Вопросы и пожелания
Ответить
antony
Сообщения: 134
Зарегистрирован: Чт окт 05, 2006 6:28 am

mpd5 и учет локального трафика

Сообщение antony »

Если я не ошибаюсь, mpd5 умеет считать локальный трафик (mpd-filter).

Вот фильтры:

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

mpd-filter += "1#1=match dst net 10.0.0.0/8"
        mpd-filter += "2#1=match src net 10.0.0.0/8"
        mpd-filter += "1#2=match dst net ХХХ.ХХХ.181.0/24"
        mpd-filter += "2#2=match src net ХХХ.ХХХ.181.0/24"

        mpd-limit += "in#1#1=flt1 pass"
        mpd-limit += "out#1#1=flt2 pass"
        mpd-limit += "out#2#0=all shape 262144 4000"
        mpd-limit += "in#2#0=all shape 262144 4000"
Вот что в радиусе:

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

        Acct-Session-Time = 123
        Acct-Input-Octets = 36904
        Acct-Input-Packets = 511
        Acct-Input-Gigawords = 0
        Acct-Output-Octets = 16476
        Acct-Output-Packets = 249
        Acct-Output-Gigawords = 0
        mpd-input-octets = "1:14390"
        mpd-input-packets = "1:240"
        mpd-input-octets = "0:18332"
        mpd-input-packets = "0:262"
        mpd-output-octets = "1:14390"
        mpd-output-packets = "1:240"
        mpd-output-octets = "0:0"
        mpd-output-packets = "0:0"

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

mpd-input-octets = "1:14390"
        mpd-input-packets = "1:240"
        mpd-output-octets = "1:14390"
        mpd-output-packets = "1:240"
Вот локальный трафик. Все верно?

Но в биллинг эти данные не попадают. Попадают только
Acct-Input-Octets = 36904
Acct-Input-Packets = 511
Acct-Input-Gigawords = 0
Acct-Output-Octets = 16476
Acct-Output-Packets = 249
Чем это вызвано? (Я так думаю в Acct.pm можно подправить. )

Использование mpd5 для учета трафика оправдано? Или все-же лучше использовать mpd+IPN+netflow?

Одновременных пользователей предполагается 200-300 в онлайне с фильтрами скорости через mpd5.


upd.

файл /abills/libexec/racct.pl строчка 229,230 строка

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

    $RAD->{INBYTE} = $RAD->{ACCT_OUTPUT_OCTETS} || 0; # FROM client
    $RAD->{OUTBYTE} = $RAD->{ACCT_INPUT_OCTETS} || 0; # TO client
тут случайно направления не перепутаны? с cvsup вчера обновлялся.


upd.

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

    if ($nas->{NAS_TYPE} eq 'mpd5' && $RAD->{MPD_INPUT_OCTETS}) {
   <--->  if (ref $RAD->{MPD_INPUT_OCTETS} eq 'ARRAY') {
     print asd "MPD = $RAD->{MPD_INPUT_OCTETS}\n";
        foreach my $line  (@{ $RAD->{MPD_INPUT_OCTETS} }) {
          my($class, $byte)=split(/:/, $line);
          $class = ($class == 0) ? '' : $class + 1;
          $RAD->{'INBYTE'. $class }<--->= $byte;
          print "IN = $RAD->{'INBYTE'. $class }<--->= $byte\n";
         }

        foreach my $line  (@{ $RAD->{MPD_OUTPUT_OCTETS} }) {
          my($class, $byte)=split(/:/, $line);
          $class = ($class == 0) ? '' : $class + 1;
          $RAD->{'OUTBYTE' . $class}<-->= $byte;
         }


кто нибудь знает почему этот код НЕ РАБОТАЕТ?

в радиусе:

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

        mpd-input-octets = "1:1198237"
        mpd-input-octets = "0:50225"
        mpd-output-octets = "1:1197130"
        mpd-output-octets = "0:338430"
А $RAD->{MPD_OUTPUT_OCTETS} имеет значение только 0:50225, т.е. это не массив как минимум с двумя значениями.
Подскажите как исправить ?!

Ответить