Нашел, я внес изменения в эту процедуру:
Код: Выделить всё
#**********************************************************
# Manage mikrotik bandwidth
# 3 type of actions
# up
# down
# check
#**********************************************************
sub mikrotik {
my ($attr)=@_;
my $cmd = '';
my $proto = 'pptp';
my $nets = '';
my $nas_host = '';
my $nas_admin = '';
my $SSH = '/usr/bin/ssh';
foreach my $id (keys %{ $attr->{SPEEDS} }) {
my $interface = "<$proto-$USER>";
my $name = "ads-$proto-$USER";
my $speed_in = $attr->{SPEEDS}->{$id}->{IN};
my $speed_out = $attr->{SPEEDS}->{$id}->{OUT};
my $speed_bt_in = $speed_in + ($speed_in / 2);
my $speed_bt_out = $speed_out + ($speed_in / 2);
my $speed_bl_in = $speed_in * 2;
my $speed_bl_out = $speed_out * 2;
$cmd = '';
if ($id == 0) {
$nets = '0.0.0.0/0';
}
else {
$nets = $attr->{NETS}->[0];
}
if ($nets ne '' || $id == 0) {
if ($ACTION eq 'up') {
$cmd = "/queue tree add name name=\"$name\" dst-address=0.0.0.0/0 interface=$interface
parent=none direction=both priority=8 queue=default-small/default-small
limit-at=$speed_in/$speed_out max-limit=$speed_in/$speed_out
burst-limit=$speed_bl_in/$speed_bl_out burst-threshold=$speed_bt_in/$speed_bt_out burst-time=8/8
total-queue=default-small;";
}
elsif($ACTION eq 'down') {
$cmd = "/queue tree add name remove [ find name=$name ];";
}
}
}
my $result = `$SSH $nas_admin\@$nas_host "$cmd"`;
}
Также внес изменения в эту следующую процедуру:
Код: Выделить всё
#**********************************************************
# Manage mikrotik bandwidth
# 3 type of actions
# up
# down
# check
#**********************************************************
sub mikrotik_ext {
my ($attr)=@_;
my $speeds = $attr->{SPEEDS};
my $nets = $attr->{NETS};
my $proto = $argv->{PROTO} || 'pptp';
my $nas_host = $argv->{NAS_HOST} || '';
my $nas_admin = $argv->{NAS_ADMIN}|| 'admin';
my $SSH = $argv->{SSH_CMD} || '/usr/bin/ssh';
my $cmds = "$SSH $nas_admin\@$nas_host '/ppp active print where name=$USER'";
open(CMD, "$cmds |") || die "Can't open '$cmds' $!\n";
my @check_int = <CMD>;
close(CMD);
my $protoup = (grep /pppoe/, @check_int) ? "pppoe" : "pptp";
$INTERFACE="<$protoup-$USER>";
my @commands = ();
$INTERFACE="<$proto-$USER>";
if($ACTION eq 'down') {
foreach my $traf_type (sort keys %$speeds) {
my @nets_arr = ();
if ($nets->{$traf_type}) {
$nets->{$traf_type} =~ s/[\r]?\n//g;
$nets->{$traf_type} =~ s/;/,/g;
@nets_arr = split(/;|,/, $nets->{$traf_type});
}
my $address_list_name = "TT_$user->{TP_ID}_".$traf_type."_".$USER;
my $mark_name=$address_list_name. "_mark";
my $mark_name_in=$address_list_name. "_mark_in";
my $mark_name_out=$address_list_name. "_mark_out";
push @commands, "/ip firewall address-list remove [ find list=$address_list_name ]; ";
push @commands, "/ip firewall mangle remove [ find comment=$mark_name_in ]; ";
push @commands, "/ip firewall mangle remove [ find comment=$mark_name_out ]; ";
push @commands, "/queue tree remove [ find name=$mark_name_out ] ";
push @commands, "/queue tree remove [ find name=$mark_name_in ] ";
}
} else {
foreach my $traf_type (sort keys %$speeds) {
my $speed = $speeds->{$traf_type};
my $speed_in = (defined($speed->{IN})) ? $speed->{IN} * 1024 : 0;
my $speed_out = (defined($speed->{OUT})) ? $speed->{OUT}* 1024 : 0;
my $speed_bt_in = $speed_in * 2;
my $speed_bt_out = $speed_out * 2;
my $speed_bl_in = $speed_in * 2;
my $speed_bl_out = $speed_out * 2;
my @nets_arr = ();
if ($nets->{$traf_type}) {
$nets->{$traf_type} =~ s/[\r]?\n//g;
$nets->{$traf_type} =~ s/;/,/g;
@nets_arr = split(/;|,/, $nets->{$traf_type});
}
my $address_list_name = "TT_$user->{TP_ID}_".$traf_type."_".$USER;
my $mark_name_in=$address_list_name. "_mark_in";
my $mark_name_out=$address_list_name. "_mark_out";
my $priority = 5 - $traf_type;
if ($traf_type == 0) {
push @commands, qq{ /ip firewall mangle add chain=forward out-interface=$INTERFACE action=mark-packet new-packet-mark=$mark_name_in comment=$mark_name_in passthrough=yes };
push @commands, qq{ /ip firewall mangle add chain=forward in-interface=$INTERFACE action=mark-packet new-packet-mark=$mark_name_out comment=$mark_name_out passthrough=yes };
push @commands, qq{ /queue tree add name=$mark_name_in parent=$INTERFACE packet-mark=$mark_name_in limit-at=$speed_in max-limit=$speed_in queue=default-small priority=8 burst-limit=$speed_bl_in burst-threshold=$speed_bt_in burst-time=8};
push @commands, qq{ /queue tree add name=$mark_name_out parent=global-out packet-mark=$mark_name_out limit-at=$speed_out max-limit=$speed_out queue=default-small priority=8 burst-limit=$speed_bl_out burst-threshold=$speed_bt_out burst-time=8};
}
foreach my $address (@nets_arr) {
push @commands, qq{ /ip firewall address-list add list=$address_list_name address=$address };
}
push @commands, qq{ /ip firewall mangle add chain=forward out-interface=$INTERFACE action=mark-packet new-packet-mark=$mark_name_in comment=$mark_name_in passthrough=yes };
push @commands, qq{ /ip firewall mangle add chain=forward in-interface=$INTERFACE action=mark-packet new-packet-mark=$mark_name_out comment=$mark_name_out passthrough=yes };
push @commands, qq{ /queue tree add name=$mark_name_in parent=$INTERFACE packet-mark=$mark_name_in limit-at=$speed_in max-limit=$speed_in queue=default-small priority=8 burst-limit=$speed_bl_in burst-threshold=$speed_bt_in burst-time=8 };
push @commands, qq{ /queue tree add name=$mark_name_out parent=global-out packet-mark=$mark_name_out limit-at=$speed_out max-limit=$speed_out queue=default-small priority=8 burst-limit=$speed_bl_out burst-threshold=$speed_bt_out burst-time=8 };
}
}
#Make ssh command
my $result = '';
$result .= `echo "===> Initialising remote commands executing:" >> /var/log/shaper`;
foreach my $cmd (@commands) {
print "$cmd\n" if ($debug > 0);
$result .= `$SSH $nas_admin\@$nas_host "$cmd"; echo "$cmd" >> /var/log/shaper`;
}
print $result;
}
проверьте пожалуйства внесенніе изменения.