X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fqos.cgi;h=42321c96fa7586031e6f98e9166537a263e9127c;hp=094cd87351a048fc9ed4bc6c73e23d5e4c19e6e1;hb=f013ab2b65d639808ce857511e9dc7f99f916957;hpb=b684b13b2b8123d5e4a85641b869447f446ef5d8 diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi index 094cd87351..42321c96fa 100644 --- a/html/cgi-bin/qos.cgi +++ b/html/cgi-bin/qos.cgi @@ -7,9 +7,10 @@ # (c) The IPFire Team # +use RRDs; use strict; # enable only the following on debugging purpose -use warnings; +# use warnings; use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; @@ -19,7 +20,7 @@ require "${General::swroot}/header.pl"; my %qossettings = (); my %checked = (); my %netsettings = (); -my $message = ""; +my $message = ''; my $errormessage = ""; my $c = ""; my $direntry = ""; @@ -27,22 +28,27 @@ my $classentry = ""; my $subclassentry = ""; my $l7ruleentry = ""; my $portruleentry = ""; +my $tosruleentry = ""; my @tmp = (); my @classes = (); my @subclasses = (); my @l7rules = (); my @portrules = (); +my @tosrules = (); my @tmpline = (); my @classline = (); my @subclassline = (); my @l7ruleline = (); my @portruleline = (); +my @tosruleline = (); my @proto = (); -my %selected= () ; +my %selected= (); +my @checked = (); my $classfile = "/var/ipfire/qos/classes"; my $subclassfile = "/var/ipfire/qos/subclasses"; my $level7file = "/var/ipfire/qos/level7config"; my $portfile = "/var/ipfire/qos/portconfig"; +my $tosfile = "/var/ipfire/qos/tosconfig"; &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &Header::showhttpheaders(); @@ -66,6 +72,8 @@ $qossettings{'VALID'} = 'yes'; $qossettings{'ACTION'} = ''; $qossettings{'ACTIONDEF'} = ''; $qossettings{'ACTIONBW'} = ''; +$qossettings{'RED_DEV_SEL'} = ''; +$qossettings{'IMQ_DEV_SEL'} = ''; $qossettings{'PRIO'} = ''; $qossettings{'SPD'} = ''; $qossettings{'CLASS'} = ''; @@ -85,43 +93,16 @@ $qossettings{'DOCLASS'} = ''; $qossettings{'DOSCLASS'} = ''; $qossettings{'DOLEVEL7'} = ''; $qossettings{'DOPORT'} = ''; +$qossettings{'CLASS'} = ''; +$qossettings{'CLASSPRFX'} = ''; +$qossettings{'DEV'} = ''; +$qossettings{'TOS'} = ''; &General::readhash("${General::swroot}/qos/settings", \%qossettings); &Header::getcgihash(\%qossettings); &Header::openpage('QoS', 1, ''); - -print < - - - -END -; - &Header::openbigbox('100%', 'left', '', $errormessage); ############################################################################################################################ @@ -135,7 +116,7 @@ if ($qossettings{'DOCLASS'} eq $Lang::tr{'save'}) if ( $qossettings{'VALID'} eq 'yes' ) { open( FILE, ">> $classfile" ) or die "Unable to write $classfile"; print FILE <= 1000 && $qossettings{'CLASS'} < 1021) { - $qossettings{'DEVICE'} = $qossettings{'RED_DEV'}; - } elsif ($qossettings{'SCLASS'} >= 2000 && $qossettings{'CLASS'} < 2021) { - $qossettings{'DEVICE'} = $qossettings{'IMQ_DEV'}; - } &validsubclass(); &validminbwdth(); if ( $qossettings{'VALID'} eq 'yes' ) { open( FILE, ">> $subclassfile" ) or die "Unable to write $subclassfile"; print FILE <= 100 && $qossettings{'CLASS'} < 121) { + $qossettings{'DEVICE'} = $qossettings{'RED_DEV'}; + } elsif ($qossettings{'CLASS'} >= 1000 && $qossettings{'CLASS'} < 1021) { + $qossettings{'DEVICE'} = $qossettings{'RED_DEV'}; + } elsif ($qossettings{'CLASS'} >= 200 && $qossettings{'CLASS'} < 221) { + $qossettings{'DEVICE'} = $qossettings{'IMQ_DEV'}; + } elsif ($qossettings{'CLASS'} >= 2000 && $qossettings{'CLASS'} < 2021) { + $qossettings{'DEVICE'} = $qossettings{'IMQ_DEV'}; + } + open( FILE, ">> $tosfile" ) or die "Unable to write $tosfile"; + print FILE <; + close FILE; + open( FILE, "> $tosfile" ) or die "Unable to read $tosfile"; + foreach $tosruleentry (sort @tosrules) + { + @tosruleline = split( /\;/, $tosruleentry ); + unless ( ($tosruleline[0] eq $qossettings{'CLASS'}) && ($tosruleline[2] eq $qossettings{'TOS'})) + { + print FILE $tosruleentry; + } + } + close FILE; + $message = "TOS-Regel ($qossettings{'CLASS'} - $qossettings{'TOS'}) wurde geloescht."; +} elsif ($qossettings{'DOTOS'} eq 'Bearbeiten') +{ + open( FILE, "< $tosfile" ) or die "Unable to read $tosfile"; + @tosrules = ; + close FILE; + open( FILE, "> $tosfile" ) or die "Unable to write $tosfile"; + foreach $tosruleentry (sort @tosrules) + { + @tosruleline = split( /\;/, $tosruleentry ); + if (( $tosruleline[0] eq $qossettings{'CLASS'} ) && ( $tosruleline[2] eq $qossettings{'TOS'} )) { + $qossettings{'DEVICE'} = $tosruleline[1]; + $qossettings{'CLASS'} = $tosruleline[0]; + $qossettings{'TOS'} = $tosruleline[2]; + $qossettings{'EDIT'} = 'yes'; + } else { + print FILE $tosruleentry; + } + } + close FILE; + &tosrule(); + &Header::closebigbox(); + &Header::closepage(); + exit +} + +############################################################################################################################ +############################################################################################################################ + if ($qossettings{'ACTION'} eq 'Start') { - system("sleep 2 && /usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > /var/ipfire/qos/bin/qos.sh &"); + system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); system("/bin/touch /var/ipfire/qos/enable"); + system("/usr/local/bin/qosctrl start >/dev/null 2>&1"); + system("logger -t ipfire 'QoS started'"); $qossettings{'ENABLED'} = 'on'; &General::writehash("${General::swroot}/qos/settings", \%qossettings); } elsif ($qossettings{'ACTION'} eq 'Stop') { + system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); unlink "/var/ipfire/qos/bin/qos.sh"; unlink "/var/ipfire/qos/enable"; + system("logger -t ipfire 'QoS stopped'"); $qossettings{'ENABLED'} = 'off'; &General::writehash("${General::swroot}/qos/settings", \%qossettings); } elsif ($qossettings{'ACTION'} eq 'Neustart') { if ($qossettings{'ENABLED'} eq 'on'){ - system("sleep 2 && /usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > /var/ipfire/qos/bin/qos.sh &"); + system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); + system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); + system("/usr/local/bin/qosctrl start >/dev/null 2>&1"); + system("logger -t ipfire 'QoS restarted'"); } } elsif ($qossettings{'ACTION'} eq $Lang::tr{'save'}) @@ -383,30 +430,140 @@ elsif ($qossettings{'ACTION'} eq $Lang::tr{'save'}) } &General::writehash("${General::swroot}/qos/settings", \%qossettings); } -elsif ($qossettings{'ACTION'} eq 'Parentklasse hinzufuegen') +elsif ($qossettings{'ACTION'} eq 'Statusinformationen') { - &parentclass(); + &Header::openbox('100%', 'left', 'QoS Status'); + if ($qossettings{'ENABLED'} eq 'on'){ + my $output = ""; + $output = `/usr/local/bin/qosctrl status`; + $output = &Header::cleanhtml($output,"y"); + print "
$output
\n"; + } else { print "QoS ist nicht aktiviert!"; } + &Header::closebox(); &Header::closebigbox(); &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Unterklasse hinzufuegen') +elsif ($qossettings{'ACTION'} eq 'Grafische Auswertung') { - &subclass(); + open( FILE, "< $classfile" ) or die "Unable to read $classfile"; + @classes = ; + close FILE; + open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile"; + @subclasses = ; + close FILE; + &Header::openbox('100%', 'left', 'QoS Graphen'); + print < Diese Seite braucht je nach Geschwindigkeit des Computers laenger zum Laden. + Klasse: +END +; + foreach $classentry (sort @classes) + { + @classline = split( /\;/, $classentry ); + $qossettings{'CLASS'}=$classline[1]; + print < +END +; + } + print < +END +; + &Header::closebox(); + foreach $classentry (sort @classes) + { + @classline = split( /\;/, $classentry ); + $qossettings{'DEV'}=$classline[0]; + $qossettings{'CLASS'}=$classline[1]; + &gengraph($qossettings{'DEV'},$qossettings{'CLASS'}); + print "\n"; + } +print < +END +; + &Header::closebox(); &Header::closebigbox(); &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Level7-Regel hinzufuegen') +elsif ($qossettings{'ACTION'} eq 'Parentklasse hinzufuegen') { - &level7rule(); + &parentclass(); &Header::closebigbox(); &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Port-Regel hinzufuegen') +elsif ($qossettings{'ACTION'} eq 'Unterklasse hinzufuegen') { - &portrule(); + &subclass(); + &Header::closebigbox(); + &Header::closepage(); + exit +} +elsif ($qossettings{'ACTION'} eq 'Regel hinzufuegen') +{ + &Header::openbox('100%', 'center', 'Regel hinzufuegen'); + print < + Waehlen sie eine der untenstehenden Regeln aus. + + + + + +END +; + &Header::closebox(); + print <