#!/usr/bin/perl
#
# IPFire CGIs
#
# This code is distributed under the terms of the GPL
#
# (c) The IPFire Team
#
use strict;
# enable only the following on debugging purpose
use warnings;
use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my %qossettings = ();
my %checked = ();
my %netsettings = ();
my $errormessage = "";
my $c = "";
my $direntry = "";
my @proto = ();
my %selected= () ;
&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
&Header::showhttpheaders();
$qossettings{'ENABLED'} = 'off';
$qossettings{'OUT_SPD'} = '';
$qossettings{'INC_SPD'} = '';
$qossettings{'DEFCLASS_INC'} = '';
$qossettings{'DEFCLASS_OUT'} = '';
$qossettings{'ACK'} = '';
$qossettings{'RED_DEV'} = `cat /var/ipfire/red/iface`;
$qossettings{'IMQ_DEV'} = 'imq0';
&General::readhash("${General::swroot}/qos/settings", \%qossettings);
&Header::getcgihash(\%qossettings);
&Header::openpage('QoS', 1, '');
&Header::openbigbox('100%', 'left', '', $errormessage);
if ($qossettings{'ACTION'} eq 'Start')
{
system("/bin/touch /var/ipfire/qos/enable");
$qossettings{'ENABLED'} = 'on';
&General::writehash("${General::swroot}/qos/settings", \%qossettings);
}
elsif ($qossettings{'ACTION'} eq 'Stop')
{
unlink "/var/ipfire/qos/enable";
$qossettings{'ENABLED'} = 'off';
&General::writehash("${General::swroot}/qos/settings", \%qossettings);
}
elsif ($qossettings{'ACTION'} eq $Lang::tr{'save'})
{
&General::writehash("${General::swroot}/qos/settings", \%qossettings);
}
elsif ($qossettings{'ACTION'} eq 'Parentklasse hinzufuegen')
{
&parentclass();
&Header::closebigbox();
&Header::closepage();
exit
}
elsif ($qossettings{'ACTION'} eq 'Level7-Regel hinzufuegen')
{
&level7rule();
&Header::closebigbox();
&Header::closepage();
exit
}
if ($qossettings{'ACTION_BW'} eq 'Andern')
{
&changebandwidth();
&Header::closebigbox();
&Header::closepage();
exit
}
if ($qossettings{'ACTION_DEF'} eq 'Andern')
{
&changedefclasses();
&Header::closebigbox();
&Header::closepage();
exit
}
&General::readhash("${General::swroot}/qos/settings", \%qossettings);
my $status = $Lang::tr{'stopped'};
my $statuscolor = $Header::colourred;
if ( $qossettings{'ENABLED'} eq 'on' ) {
$status = $Lang::tr{'running'};
$statuscolor = $Header::colourgreen;
}
if ( $netsettings{'RED_TYPE'} ne 'PPPOE' ) {
$qossettings{'RED_DEV'} = $netsettings{'RED_DEV'};
}
if ($errormessage) {
&Header::openbox('100%', 'left', $Lang::tr{'error messages'});
print "$errormessage\n";
print " \n";
&Header::closebox();
}
&Header::openbox('100%', 'center', 'Quality of Service');
print <
Quality of Service:
$status
END
;
if (($qossettings{'OUT_SPD'} ne '') && ($qossettings{'INC_SPD'} ne '')) {
print <
Downloadgeschwindigkeit:
$qossettings{'INC_SPD'} kbps
Uploadgeschwindigkeit:
$qossettings{'OUT_SPD'} kbps
END
;
}
if (($qossettings{'DEFCLASS_OUT'} ne '') && ($qossettings{'DEFCLASS_INC'} ne '')&& ($qossettings{'ACK'} ne '')) {
print <
Legen sie hier die Standardklassen fest durch die nicht-gefilterte Pakete gehen.
Download:
Legen sie hier die ACK-Klasse fest und klicken Sie danach auf Speichern.
ACKs:
END
;
for ( $c = 200 ; $c <= 220 ; $c++ )
{
if ( $qossettings{'ACK'} ne $c )
{
print "\n";
}
else
{
print "\n";
}
}
print <
END
;
&Header::closebox();
}
sub changebandwidth {
&Header::openbox('100%', 'center', 'Bandbreiteneinstellungen');
if ($qossettings{'ENABLED'} eq 'on') {
print "Sie koennen die Bandbreiteneinstellungen nicht bearbeiten, wenn QoS eingeschaltet ist. Schalten sie es zuerst dazu aus.