MPD + External Accounting

Ответить
Zyb
Сообщения: 4
Зарегистрирован: Пн янв 14, 2008 10:48 am

MPD + External Accounting

Сообщение Zyb »

Первым делом благодарства Автору! А теперь по делу:))
Отключение от мпдехи при достижения минуса происходит посредством Ipn( используя $conf{IPN_FW_STOP_RULE} ) а это не есть верно:(
Как соединение было инициировано так и желательно отключать:)
В traffic2sql где то на 374 после :
#Hangup users with negative deposit
if (! $Ipn->{USERS_INFO}->{PAYMENT_TYPE}->{$uid} &&
defined($Ipn->{USERS_INFO}->{DEPOSIT}->{$uid}) &&
$Ipn->{USERS_INFO}->{DEPOSIT}->{$uid} < 0) {


вставляем :

require Nas;
my $nas = Nas->new($db, \%conf);
my $NAS = $nas->info({NAS_ID => $NAS_IDS});

if($NAS->{NAS_EXT_ACCT} eq 1)
{
require "Abills/nas.pl";

require Admins;
Admins->import();
my $admin = Admins->new($db, \%conf);
$admin->info($conf{SYSTEM_ADMIN_ID}, { IP => '127.0.0.1' });

require Dv_Sessions;
my $sessions = Dv_Sessions->new($db, $admin, \%conf);

if ($admin->{errno}) { print $admin->{errstr};
print $admin->{errno};
return;
}

my $online=$sessions->online({FILTER_FIELD=>18,FILTER=>$uid});

hangup($NAS, $online->[0]->[2], $uid, { ACCT_SESSION_IS => $online->[0]->[22],
FRAMED_IP_ADDRESS => int2ip($online->[0]->[3]),
ACCT_TERMINATE_CAUSE => 15,
UID => $online->[0]->[12],
debug => $debug
});
return;
}

Zyb
Сообщения: 4
Зарегистрирован: Пн янв 14, 2008 10:48 am

Сообщение Zyb »

Хотя этот кусок можно переписать так, что более логично:) :
ИСХОДНЫЙ , где т на 370 строках :

if (! $Ipn->{USERS_INFO}->{PAYMENT_TYPE}->{$uid} &&
defined($Ipn->{USERS_INFO}->{DEPOSIT}->{$uid}) &&
$Ipn->{USERS_INFO}->{DEPOSIT}->{$uid} < 0) {
my @ip_array = split(/\./, $ip_addr, 4);

my $num = 0;
if ($conf{IPN_FW_RULE_UID}) {
$num = $uid;
}
else {
my @ip_array = split(/\./, $ip_addr, 4);
$num = $ip_array[3];
}

my $rule_num = $conf{IPN_FW_FIRST_RULE} + 10000 + $num;

print "$DATE $TIME Hangup UID: $uid DEPOSIT: $Ipn->{USERS_INFO}->{DEPOSIT}->{$uid}\n" if ($debug>0);
my $netmask = 32;

my $cmd = $conf{IPN_FW_STOP_RULE};

$cmd =~ s/\%IP/$ip_addr/g;
$cmd =~ s/\%NUM/$rule_num/g;
$cmd =~ s/\%MASK/$netmask/g;
$cmd =~ s/\%LOGIN/$login/g;

print "$cmd" if ($debug>0);
system("$cmd");
$Ipn->acct_stop({ SESSION_ID => $session_id,
ACCT_TERMINATE_CAUSE => 10 });
}


НА :
if (! $Ipn->{USERS_INFO}->{PAYMENT_TYPE}->{$uid} &&
defined($Ipn->{USERS_INFO}->{DEPOSIT}->{$uid}) &&
$Ipn->{USERS_INFO}->{DEPOSIT}->{$uid} < 0) {

require Nas;
my $nas = Nas->new($db, \%conf);
my $NAS = $nas->info({NAS_ID => $NAS_IDS});

require "Abills/nas.pl";

require Admins;
Admins->import();
my $admin = Admins->new($db, \%conf);
$admin->info($conf{SYSTEM_ADMIN_ID}, { IP => '127.0.0.1' });

require Dv_Sessions;
my $sessions = Dv_Sessions->new($db, $admin, \%conf);

if ($admin->{errno}) { print $admin->{errstr};
print $admin->{errno};
return;
}

my $online=$sessions->online({FILTER_FIELD=>18,FILTER=>$uid});

hangup($NAS, $online->[0]->[2], $uid, { ACCT_SESSION_IS => $online->[0]->[22],
FRAMED_IP_ADDRESS => int2ip($online->[0]->[3]),
ACCT_TERMINATE_CAUSE => 15,
UID => $online->[0]->[12],
debug => $debug
});
}

Причиной замены этого куска послужило то что когда , в моём случае , через мпд с external acco... создаёт соединение юзвер , то отключение его не происходит а просто лишь блокировка фаером его....

NightFish
Сообщения: 16
Зарегистрирован: Вс авг 17, 2014 12:10 pm

Re: MPD + External Accounting

Сообщение NightFish »

Предыдущие варианты у меня с NAS Mikrotik и Abills 0.55 не заработали.

Выкладываю свою версию. Также она не сбрасывает с линии, если пользователь уже сидит как гость.

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

      #Hangup users with negative deposit
      if ( !$Ipn->{USERS_INFO}->{PAYMENT_TYPE}->{$uid}
        && defined($Ipn->{USERS_INFO}->{DEPOSIT}->{$uid})
        && $Ipn->{USERS_INFO}->{DEPOSIT}->{$uid} < 0)
      {
        #If session online hangup it
        if ($session_id) {
                require Log;
                Log->import('log_add');
                $Log = Log->new($db, \%conf);
                $Log->{PRINT} = 1;

                require Nas;
                my $nas = Nas->new($db, \%conf);
                my $NAS = $nas->info({NAS_ID => $NAS_IDS});

                require "Abills/nas.pl";

                require Admins;
                Admins->import();
                my $admin = Admins->new($db, \%conf);
                $admin->info($conf{SYSTEM_ADMIN_ID}, { IP => '127.0.0.1' });

                require Dv_Sessions;
                my $sessions = Dv_Sessions->new($db, $admin, \%conf);

                if ($admin->{errno}) {
                        print $admin->{errstr};
                        print $admin->{errno};
                        return;
                }

                my $online = $sessions->online({'FILTER_FIELD' => 'UID', FILTER => $uid, 'CLIENT_IP' => '_SHOW', 'USER_NAME' => '_SHOW', 'GUEST' => '_SHOW'});

                #If user becomes a guest - don't hangup it
                if ( !$online->[0]->{'guest'} ) {
                        hangup($NAS, '', $online->[0]->{'user_name'},
                                { 'FRAMED_IP_ADDRESS' => $online->[0]->{'client_ip'},
                                  'DEBUG' => $debug
                                }
                        );
                }

        }
      }

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: MPD + External Accounting

Сообщение ~AsmodeuS~ »

так сброс происходит через billd

NightFish
Сообщения: 16
Зарегистрирован: Вс авг 17, 2014 12:10 pm

Re: MPD + External Accounting

Сообщение NightFish »

~AsmodeuS~ писал(а):так сброс происходит через billd
Не происходит. У меня, например, стоит Dv для PPPoE и Ipn для тарификации разного трафика. Соответственно стоит IPN_DEPOSIT_OPERATION=1 и billd -all в кроне нет.
При использовании billd, кроме сброса, происходит ещё и повторное снятие денег. К тому же, billd, насколько я знаю, не различает направления трафика (снимает деньги и за бесплатный трафик). Или нет?

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: MPD + External Accounting

Сообщение ~AsmodeuS~ »

В МАНУАЛЕ НАПИСАНО ДОЛЖЕН РАБОТАТЬ billd значит должен

1 он не занимается снятием денег
2 он не занимается различением трафика


по умолчанию лг делает следующие операции

1 проверяет не закончились ли деньги на счету елси закончились сбрасывает
2 проверяет активна ли у абонента сессия если не активна чистит базу

то есть если billd отключён у и случайно не прийдёт стоп сессия будет типа висеть вб илинге и абонент не сможет подключиться

NightFish
Сообщения: 16
Зарегистрирован: Вс авг 17, 2014 12:10 pm

Re: MPD + External Accounting

Сообщение NightFish »

А какой процесс тогда занимается снятием денег с абонента за превышение предоплаченного трафика? Допустим, если у нас нет IPN.

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: MPD + External Accounting

Сообщение ~AsmodeuS~ »

радиус акаунтинг

NightFish
Сообщения: 16
Зарегистрирован: Вс авг 17, 2014 12:10 pm

Re: MPD + External Accounting

Сообщение NightFish »

Радиус аккаунт даёт только данные о трафике. А какой-то процесс должен уже снимать деньги соответственно тарифу. Какой же, если не biild?

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: MPD + External Accounting

Сообщение ~AsmodeuS~ »

как же тяжело иногда объяснить

попробую еще раз

для коммутируемых соединений идёт аккаунтинг через радиус в котором встроен обработчик аккаунтинг данных и подсчет трафика.

так как для IPN нет радиуса обработчик аккаунтинга сделан в traffic2sql

NightFish
Сообщения: 16
Зарегистрирован: Вс авг 17, 2014 12:10 pm

Re: MPD + External Accounting

Сообщение NightFish »

Понятно.
А теперь давайте рассмотрим вариант с модулям Dv и Ipn, работающими вместе.
Dv учитывает коммутируемые соединения и тарифы, а Ipn ведёт подсчёт трафика по направлениям.
Как быть в этой ситуации?

Ответить