MPD + External Accounting
MPD + External Accounting
Первым делом благодарства Автору! А теперь по делу:))
Отключение от мпдехи при достижения минуса происходит посредством 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;
}
Отключение от мпдехи при достижения минуса происходит посредством 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;
}
Хотя этот кусок можно переписать так, что более логично:) :
ИСХОДНЫЙ , где т на 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... создаёт соединение юзвер , то отключение его не происходит а просто лишь блокировка фаером его....
ИСХОДНЫЙ , где т на 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... создаёт соединение юзвер , то отключение его не происходит а просто лишь блокировка фаером его....
Re: MPD + External Accounting
Предыдущие варианты у меня с 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
}
);
}
}
}
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Re: MPD + External Accounting
так сброс происходит через billd
Re: MPD + External Accounting
Не происходит. У меня, например, стоит Dv для PPPoE и Ipn для тарификации разного трафика. Соответственно стоит IPN_DEPOSIT_OPERATION=1 и billd -all в кроне нет.~AsmodeuS~ писал(а):так сброс происходит через billd
При использовании billd, кроме сброса, происходит ещё и повторное снятие денег. К тому же, billd, насколько я знаю, не различает направления трафика (снимает деньги и за бесплатный трафик). Или нет?
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Re: MPD + External Accounting
В МАНУАЛЕ НАПИСАНО ДОЛЖЕН РАБОТАТЬ billd значит должен
1 он не занимается снятием денег
2 он не занимается различением трафика
по умолчанию лг делает следующие операции
1 проверяет не закончились ли деньги на счету елси закончились сбрасывает
2 проверяет активна ли у абонента сессия если не активна чистит базу
то есть если billd отключён у и случайно не прийдёт стоп сессия будет типа висеть вб илинге и абонент не сможет подключиться
1 он не занимается снятием денег
2 он не занимается различением трафика
по умолчанию лг делает следующие операции
1 проверяет не закончились ли деньги на счету елси закончились сбрасывает
2 проверяет активна ли у абонента сессия если не активна чистит базу
то есть если billd отключён у и случайно не прийдёт стоп сессия будет типа висеть вб илинге и абонент не сможет подключиться
Re: MPD + External Accounting
А какой процесс тогда занимается снятием денег с абонента за превышение предоплаченного трафика? Допустим, если у нас нет IPN.
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Re: MPD + External Accounting
радиус акаунтинг
Re: MPD + External Accounting
Радиус аккаунт даёт только данные о трафике. А какой-то процесс должен уже снимать деньги соответственно тарифу. Какой же, если не biild?
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Re: MPD + External Accounting
как же тяжело иногда объяснить
попробую еще раз
для коммутируемых соединений идёт аккаунтинг через радиус в котором встроен обработчик аккаунтинг данных и подсчет трафика.
так как для IPN нет радиуса обработчик аккаунтинга сделан в traffic2sql
попробую еще раз
для коммутируемых соединений идёт аккаунтинг через радиус в котором встроен обработчик аккаунтинг данных и подсчет трафика.
так как для IPN нет радиуса обработчик аккаунтинга сделан в traffic2sql
Re: MPD + External Accounting
Понятно.
А теперь давайте рассмотрим вариант с модулям Dv и Ipn, работающими вместе.
Dv учитывает коммутируемые соединения и тарифы, а Ipn ведёт подсчёт трафика по направлениям.
Как быть в этой ситуации?
А теперь давайте рассмотрим вариант с модулям Dv и Ipn, работающими вместе.
Dv учитывает коммутируемые соединения и тарифы, а Ipn ведёт подсчёт трафика по направлениям.
Как быть в этой ситуации?