mpd5 + CoA

Вопросы и пожелания
Ответить
Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

mpd5 + CoA

Сообщение Abram »

Всем доброго времени суток.

Работает у кого CoA? Умеет ли его ABillS вообще?
Как по мне, с mpd5 это самый правильный вариант.

Сейчас рассматриваю варианты:
  • Демон, который помнит время смены интервалов и дергает СоА;
    Проверять из обработки Alive-ов.

antony
Сообщения: 134
Зарегистрирован: Чт окт 05, 2006 6:28 am

Re: mpd5 + CoA

Сообщение antony »

Мне тоже интересно, работает ли CoA и как вообще динамически меняется скорость, если использовать

SESSION_TRAFFIC_IN>20=SPEED:64;

результат никакой, т.е. скорость не меняется (скорость режится через mpd) или же эта фича сработает после перезахода?

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Re: mpd5 + CoA

Сообщение Abram »

(c) "Пан сам скльопав".

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

#!/usr/bin/perl

use DBI;

#First, we need some configuration for MySQL:
$mysqlAHost = 'localhost';
$mysqlADb = 'abills';
$mysqlAUser = 'coa';
$mysqlAPassword = 'olololololo!';
$mysqlAConnect = "dbi:mysql:$mysqlADb;$mysqlAHost";

$Adbh = DBI->connect($mysqlAConnect, $mysqlAUser, $mysqlAPassword);

$Aquery = "SELECT dvc.user_name AS user_name, s.in_speed AS in_speed, s.out_speed AS out_speed, n.ip AS nas_ip, DECODE( n.mng_password,  'ololololololo' ) AS nas_password
FROM  `dv_calls` AS dvc,  `trafic_tarifs` AS s,  `intervals` AS i,  `dv_main` AS dv,  `users` AS u,  `nas` AS n
WHERE dvc.nas_id = n.id
AND n.nas_type =  'mpd5'
AND dvc.uid = u.uid
AND dv.uid = u.uid
AND dv.tp_id = i.tp_id
AND s.interval_id = i.id
AND i.begin <= CURTIME( ) 
AND i.end > CURTIME( ) ;";

$Asth = $Adbh->prepare($Aquery);
$Aresults = $Adbh->selectall_hashref($Aquery, 'user_name');
foreach $user_name (keys %$Aresults) {
$speed_in = $Aresults->{$user_name}->{in_speed} * 1024;
$speed_out = $Aresults->{$user_name}->{out_speed} * 1024;
$nasip = $Aresults->{$user_name}->{nas_ip};
$naspw = $Aresults->{$user_name}->{nas_password};
$burst_in = $speed_in * 2 / 16;
$burst_out = $speed_out * 2 / 16;

system ("/bin/echo User-Name=$user_name,mpd-limit+=\\\"in\#1=all shape $speed_in $burst_in pass\\\",mpd-limit+=\\\"out\#1=all shape $speed_out $burst_out pass\\\"|/usr/local/bin/radclient -x $nasip:3799 coa $naspw");
}

$Adbh->disconnect();

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

--- Auth.pm_backup_before_mpd5_patch	2010-04-11 01:50:13.000000000 +0300
+++ Auth.pm	2010-04-12 11:59:56.000000000 +0300
@@ -578,6 +578,38 @@
   	 $RAD_PAIRS->{'Session-Timeout'}=604800;
    }
  }
+ elsif ($NAS->{NAS_TYPE} eq 'mpd5') {
+
+   my $EX_PARAMS = $self->ex_traffic_params({ 
+  	                                         traf_limit => $traf_limit, 
+                                             deposit    => $self->{DEPOSIT},
+                                             MAX_SESSION_TRAFFIC => $MAX_SESSION_TRAFFIC 
+                                           });
+     my $limit_in = "";
+     my $limit_out = "";
+     my $speed_in = 0;
+     my $speed_out = 0;
+     my $burst_in = 0;
+     my $burst_out = 0;
+     
+         if ($self->{USER_SPEED} > 0)
+         {
+           $speed_in = int($self->{USER_SPEED}) * $CONF->{KBYTE_SIZE};
+           $speed_out = $speed_in;
+         }
+         else {
+           $speed_in = int($EX_PARAMS->{speed}->{0}->{IN}) * $CONF->{KBYTE_SIZE};
+           $speed_out = int($EX_PARAMS->{speed}->{0}->{OUT}) * $CONF->{KBYTE_SIZE};
+         }
+
+         $burst_in = $speed_in * 2 / 16;
+         $burst_out = $speed_out * 2 / 16;
+         $limit_in .= "\"in#1=all shape $speed_in $burst_in pass\"";
+         $limit_out .= "\"out#1=all shape $speed_out $burst_out pass\"";
+         push @{ $RAD_PAIRS->{'mpd-limit'} }, $limit_in;
+         push @{ $RAD_PAIRS->{'mpd-limit'} }, $limit_out;
+
+}
 ###########################################################
 # pppd + RADIUS plugin (Linux) http://samba.org/ppp/
 # lepppd - PPPD IPv4 zone counters 

Abram
Сообщения: 157
Зарегистрирован: Чт мар 26, 2009 11:31 am
Контактная информация:

Re: mpd5 + CoA

Сообщение Abram »

Hanghup по PoD, nas.pl:

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

#*******************************************************************
# HANGUP MPD
# hangup_mpd5($SERVER, $PORT)
#*******************************************************************
sub hangup_mpd5 {
  my ($NAS, $PORT, $attr) = @_;

  log_print('LOG_DEBUG', " HANGUP: SESSION: $attr->{ACCT_SESSION_ID}; NAS_MNG: $NAS->{NAS_MNG_IP_PORT} '$NAS->{NAS_MNG_PASSWORD}'\n");
  system ("echo Acct-Session-Id=$attr->{ACCT_SESSION_ID} | radclient -x $NAS->{NAS_MNG_IP_PORT} 40 $NAS->{NAS_MNG_PASSWORD}");

  return 0;
}
(c) опять-таки "пан сам скльопав"

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

Re: mpd5 + CoA

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

Abram писал(а):Всем доброго времени суток.

Работает у кого CoA? Умеет ли его ABillS вообще?
Как по мне, с mpd5 это самый правильный вариант.

Сейчас рассматриваю варианты:
  • Демон, который помнит время смены интервалов и дергает СоА;
    Проверять из обработки Alive-ов.
В системе реализированно
Cisco ISG
http://www.cisco.com/en/US/docs/ios/12_ ... gcoa4.html

Ответить