Собственно, имеется сервер на FreeBSD 6.2-RELEASE, порты обновлены и из них установлен mpd-4.3, abills - current из CVS. В принципе, все настроено и работает - одно НО - надо считать трафик по зонам (одна зона бесплатно, остальные по 2 разным тарифам). Как это все можно организовать на MPD4?
На вики есть описание модуля Ipn, но как его объединить с mpd4, вот вопрос...
MPD-4.3 и разделение трафика по зонам
-
- Site Admin
- Сообщения: 5746
- Зарегистрирован: Пт янв 28, 2005 3:11 pm
- Контактная информация:
Ага...
Граблю экспортируемый mpd4 netflow при помощи flow-tools, складываю в /usr/local/abills/var/log/, запускаю traffic2sql. Что из этого получается:
Abills версии 0.37b из CVS от 25 октября. Это лыжи не едут или я такой?
Граблю экспортируемый mpd4 netflow при помощи flow-tools, складываю в /usr/local/abills/var/log/, запускаю traffic2sql. Что из этого получается:
Код: Выделить всё
[/usr/local/abills/libexec]# ./traffic2sql 1 flowdir=/usr/local/abills/var/log/ipn/ debug=3
Debug mode on
<p>select u.uid, dv.ip, u.id,
'',
0,
0,
dv.tp_id,
if (u.company_id > 0, cb.id, b.id),
if (c.name IS NULL, b.deposit, cb.deposit)+u.credit,
tp.payment_type,
0,
0,
tp.octets_direction,
u.reduction,
CONNECT_INFO
FROM (users u, dv_main dv)
LEFT JOIN companies c ON (u.company_id=c.id)
LEFT JOIN bills b ON (u.bill_id=b.id)
LEFT JOIN bills cb ON (c.bill_id=cb.id)
LEFT JOIN tarif_plans tp ON (tp.id=dv.tp_id)
WHERE u.uid=dv.uid
and dv.ip > 0 and u.disable=0 and dv.disable=0;</p>
DBD::mysql::st execute failed: Unknown column 'CONNECT_INFO' in 'field list' at /usr/local/abills/libexec/../Abills/mysql/main.pm line 131.
/usr/abills/racct.pl
перед
строками
-------------
}
my $Acct; (именно Acct который с заглавной буквы - A)
--------------
вставляем
## Eugene begin ################################
my $port = $RAD->{NAS_PORT};
my $user = $RAD->{USER_NAME};
my $status = $RAD->{ACCT_STATUS_TYPE};
my $num = 0;
my $packets = 0;
my $rule;
my $num_out = 3000 + $port * 2;
my $num_in = 3000 + $port * 2 +1;
my $bytes_out = 0;
my $bytes_in = 0;
my $num_out2 = 2000 + $port * 2;
my $num_in2 = 2000 + $port * 2 +1;
my $bytes_out2 = 0;
my $bytes_in2 = 0;
open(FW, "/sbin/ipfw sh $num_out |");
while(<FW>) {
while(<FW>) {
($num, $packets, $bytes_out, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_in |");
while(<FW>) {
($num, $packets, $bytes_in, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_out2 |");
while(<FW>) {
($num, $packets, $bytes_out2, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_in2 |");
while(<FW>) {
($num, $packets, $bytes_in2, $rule)=split(/ +/, $_, 4);
}
close(FW);
$RAD->{OUTBYTE} = $bytes_out;
$RAD->{INBYTE} = $bytes_in;
$RAD->{OUTBYTE2} = $bytes_out2;
$RAD->{INBYTE2} = $bytes_in2;
#open (log1, '>>/tmp/tmp.log');
#my $time = localtime(time);
#print log1 "$time port: $port status: $status user: $user out: $bytes_out in: $bytes_in out2: $bytes_out2 in2: $bytes_in2\n";
#close (log1);
## Eugene end ##################################
будет считаться трфик для MPD по зонам (через IPFW)
правда желательно не перезагружать файрвол без надобности
иначе счетчики обнуляются
а юзеру получается халява
перед
строками
-------------
}
my $Acct; (именно Acct который с заглавной буквы - A)
--------------
вставляем
## Eugene begin ################################
my $port = $RAD->{NAS_PORT};
my $user = $RAD->{USER_NAME};
my $status = $RAD->{ACCT_STATUS_TYPE};
my $num = 0;
my $packets = 0;
my $rule;
my $num_out = 3000 + $port * 2;
my $num_in = 3000 + $port * 2 +1;
my $bytes_out = 0;
my $bytes_in = 0;
my $num_out2 = 2000 + $port * 2;
my $num_in2 = 2000 + $port * 2 +1;
my $bytes_out2 = 0;
my $bytes_in2 = 0;
open(FW, "/sbin/ipfw sh $num_out |");
while(<FW>) {
while(<FW>) {
($num, $packets, $bytes_out, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_in |");
while(<FW>) {
($num, $packets, $bytes_in, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_out2 |");
while(<FW>) {
($num, $packets, $bytes_out2, $rule)=split(/ +/, $_, 4);
}
close(FW);
open(FW, "/sbin/ipfw sh $num_in2 |");
while(<FW>) {
($num, $packets, $bytes_in2, $rule)=split(/ +/, $_, 4);
}
close(FW);
$RAD->{OUTBYTE} = $bytes_out;
$RAD->{INBYTE} = $bytes_in;
$RAD->{OUTBYTE2} = $bytes_out2;
$RAD->{INBYTE2} = $bytes_in2;
#open (log1, '>>/tmp/tmp.log');
#my $time = localtime(time);
#print log1 "$time port: $port status: $status user: $user out: $bytes_out in: $bytes_in out2: $bytes_out2 in2: $bytes_in2\n";
#close (log1);
## Eugene end ##################################
будет считаться трфик для MPD по зонам (через IPFW)
правда желательно не перезагружать файрвол без надобности
иначе счетчики обнуляются
а юзеру получается халява
-
- Сообщения: 54
- Зарегистрирован: Ср фев 20, 2008 12:17 pm
- Контактная информация: