X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fqos.cgi;h=b7af11204ebd29c9cf20145e5e0c84e76cd3d567;hb=046ef135e667e8727d0826891004870d980a2feb;hp=6ba65b671c8536dd818eb2d4a56a423a90a70ee3;hpb=da7e266567ae65c3350e2f366c1660fe3e4acbf4;p=ipfire-2.x.git diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi index 6ba65b671c..b7af11204e 100644 --- a/html/cgi-bin/qos.cgi +++ b/html/cgi-bin/qos.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# Copyright (C) 2007-2011 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -64,8 +64,6 @@ my $portfile = "/var/ipfire/qos/portconfig"; my $tosfile = "/var/ipfire/qos/tosconfig"; &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); -&Header::showhttpheaders(); - $qossettings{'ENABLED'} = 'off'; $qossettings{'EDIT'} = 'no'; $qossettings{'OUT_SPD'} = ''; @@ -75,10 +73,7 @@ $qossettings{'DEF_INC_SPD'} = ''; $qossettings{'DEFCLASS_INC'} = ''; $qossettings{'DEFCLASS_OUT'} = ''; $qossettings{'ACK'} = ''; -$qossettings{'MTU'} = '1492'; -$qossettings{'SFQ_PERTUB'} = '10'; -$qossettings{'QLENGTH'} = '30'; -$qossettings{'RED_DEV'} = `cat /var/ipfire/red/iface`; +$qossettings{'RED_DEV'} = 'ppp0'; $qossettings{'IMQ_DEV'} = 'imq0'; $qossettings{'VALID'} = 'yes'; ### Values that have to be initialized @@ -115,13 +110,26 @@ $qossettings{'TOS'} = ''; &General::readhash("${General::swroot}/qos/settings", \%qossettings); &Header::getcgihash(\%qossettings); +$qossettings{'RED_DEV'} = `cat /var/ipfire/red/iface`; + my %color = (); my %mainsettings = (); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); -&Header::openpage('QoS', 1, ''); -&Header::openbigbox('100%', 'left', '', $errormessage); +my @querry = split(/\?/,$ENV{'QUERY_STRING'}); +$querry[0] = '' unless defined $querry[0]; +$querry[1] = 'hour' unless defined $querry[1]; + +if ( $querry[0] ne ""){ + print "Content-type: image/png\n\n"; + binmode(STDOUT); + &Graphs::updateqosgraph($querry[0],$querry[1]); +}else{ + &Header::showhttpheaders(); + + &Header::openpage('QoS', 1, ''); + &Header::openbigbox('100%', 'left', '', $errormessage); ############################################################################################################################ ############################################################################################################################ @@ -139,10 +147,10 @@ END ; close FILE; } else { - $qossettings{'ACTION'} = 'Parentklasse hinzufuegen'; + $qossettings{'ACTION'} = $Lang::tr{'parentclass add'}; } } -elsif ($qossettings{'DOCLASS'} eq 'Bearbeiten') +elsif ($qossettings{'DOCLASS'} eq $Lang::tr{'edit'}) { open( FILE, "< $classfile" ) or die "Unable to read $classfile"; @classes = ; @@ -171,7 +179,7 @@ elsif ($qossettings{'DOCLASS'} eq 'Bearbeiten') &Header::closepage(); exit } -elsif ($qossettings{'DOCLASS'} eq 'Loeschen') +elsif ($qossettings{'DOCLASS'} eq $Lang::tr{'delete'}) { open( FILE, "< $classfile" ) or die "Unable to read $classfile"; @tmp = ; @@ -217,9 +225,9 @@ END ; close FILE; } else { - $qossettings{'ACTION'} = 'Unterklasse hinzufuegen'; + $qossettings{'ACTION'} = $Lang::tr{'qos add subclass'}; } -} elsif ($qossettings{'DOSCLASS'} eq 'Loeschen') +} elsif ($qossettings{'DOSCLASS'} eq $Lang::tr{'delete'}) { open( FILE, "< $subclassfile" ) or die "Unable to read $classfile"; @tmp = ; @@ -243,15 +251,15 @@ END if ($qossettings{'DOLEVEL7'} eq $Lang::tr{'save'}) { if ( $qossettings{'QIP'} ne '' ) { - unless ( &General::validip($qossettings{'QIP'}) ) { + if ((!&General::validipandmask($qossettings{'QIP'})) && (!&General::validip($qossettings{'QIP'}))) { $qossettings{'VALID'} = 'no'; - $message = "Die Quell-IP-Adresse ist ungueltig."; + $message = $Lang::tr{'The source IP address is invalid.'}; } } if ( $qossettings{'DIP'} ne '' ) { - unless ( &General::validip($qossettings{'DIP'}) ) { + if ((!&General::validipandmask($qossettings{'DIP'})) && (!&General::validip($qossettings{'DIP'}))) { $qossettings{'VALID'} = 'no'; - $message = "Die Ziel-IP-Adresse ist ungueltig."; + $message = $Lang::tr{'The destination IP address is invalid.'}; } } if ($qossettings{'CLASS'} >= 100 && $qossettings{'CLASS'} < 121) { @@ -271,9 +279,9 @@ END ; close FILE; } else { - $qossettings{'ACTION'} = 'Level7-Regel hinzufuegen'; + $qossettings{'ACTION'} = $Lang::tr{'Add Level7 rule'}; } -} elsif ($qossettings{'DOLEVEL7'} eq 'Loeschen') +} elsif ($qossettings{'DOLEVEL7'} eq $Lang::tr{'delete'}) { open( FILE, "< $level7file" ) or die "Unable to read $level7file"; @l7rules = ; @@ -283,7 +291,7 @@ END { @l7ruleline = split( /\;/, $l7ruleentry ); if ( ($l7ruleline[0] eq $qossettings{'CLASS'}) && ($l7ruleline[2] eq $qossettings{'L7PROT'})) - {$message = "Level7-Regel ($qossettings{'CLASS'} - $qossettings{'L7PROT'}) wurde geloescht.";} + {$message = "$Lang::tr{'Level7 Rule'} ($qossettings{'CLASS'} - $qossettings{'L7PROT'}) $Lang::tr{'was deleted'}.";} else { open( FILE, ">> $level7file" ) or die "Unable to read $level7file"; print FILE $l7ruleentry; @@ -291,7 +299,7 @@ END } } open( FILE, "< $level7file" ) or system("touch $level7file");close FILE; - } elsif ($qossettings{'DOLEVEL7'} eq 'Bearbeiten') + } elsif ($qossettings{'DOLEVEL7'} eq $Lang::tr{'edit'}) { open( FILE, "< $level7file" ) or die "Unable to read $level7file"; @l7rules = ; @@ -318,15 +326,15 @@ END if ($qossettings{'DOPORT'} eq $Lang::tr{'save'}) { if ( $qossettings{'QIP'} ne '' ) { - unless ( &General::validip($qossettings{'QIP'}) ) { + if ((!&General::validipandmask($qossettings{'QIP'})) && (!&General::validip($qossettings{'QIP'}))) { $qossettings{'VALID'} = 'no'; - $message = "Die Quell-IP-Adresse ist ungueltig."; + $message = $Lang::tr{'The source IP address is invalid.'}; } } if ( $qossettings{'DIP'} ne '' ) { - unless ( &General::validip($qossettings{'DIP'}) ) { + if ((!&General::validipandmask($qossettings{'DIP'})) && (!&General::validip($qossettings{'DIP'}))) { $qossettings{'VALID'} = 'no'; - $message = "Die Ziel-IP-Adresse ist ungueltig."; + $message = $Lang::tr{'The destination IP address is invalid.'}; } } if ($qossettings{'CLASS'} >= 100 && $qossettings{'CLASS'} < 121) { @@ -346,9 +354,9 @@ END ; close FILE; } else { - $qossettings{'ACTION'} = 'Port-Regel hinzufuegen'; + $qossettings{'ACTION'} = $Lang::tr{'Add Port Rule'}; } -} elsif ($qossettings{'DOPORT'} eq 'Loeschen') +} elsif ($qossettings{'DOPORT'} eq $Lang::tr{'delete'}) { open( FILE, "< $portfile" ) or die "Unable to read $portfile"; @portrules = ; @@ -364,7 +372,7 @@ END } close FILE; $message = "$Lang::tr{'Port Rule'} ($qossettings{'CLASS'} - $qossettings{'PPROT'}) $Lang::tr{'was deleted'}."; -} elsif ($qossettings{'DOPORT'} eq 'Bearbeiten') +} elsif ($qossettings{'DOPORT'} eq $Lang::tr{'edit'}) { open( FILE, "< $portfile" ) or die "Unable to read $portfile"; @portrules = ; @@ -422,7 +430,7 @@ elsif ($qossettings{'DOTOS'} eq 'Loeschen') } close FILE; $message = "$Lang::tr{'TOS Rule'} ($qossettings{'CLASS'} - $qossettings{'TOS'}) $Lang::tr{'was deleted'}."; -} elsif ($qossettings{'DOTOS'} eq 'Bearbeiten') +} elsif ($qossettings{'DOTOS'} eq $Lang::tr{'edit'}) { open( FILE, "< $tosfile" ) or die "Unable to read $tosfile"; @tosrules = ; @@ -450,25 +458,23 @@ elsif ($qossettings{'DOTOS'} eq 'Loeschen') ############################################################################################################################ ############################################################################################################################ -if ($qossettings{'ACTION'} eq 'Start') +if ($qossettings{'ACTION'} eq $Lang::tr{'start'}) { + $qossettings{'ENABLED'} = 'on'; + &General::writehash("${General::swroot}/qos/settings", \%qossettings); system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); - system("/usr/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') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'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); + system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); + system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); + system("logger -t ipfire 'QoS stopped'"); } -elsif ($qossettings{'ACTION'} eq 'Neustart') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'restart'}) { if ($qossettings{'ENABLED'} eq 'on'){ system("/usr/local/bin/qosctrl stop >/dev/null 2>&1"); @@ -489,47 +495,48 @@ elsif ($qossettings{'ACTION'} eq $Lang::tr{'save'}) } elsif ($qossettings{'ACTION'} eq $Lang::tr{'template'} ) { - my @UP; - #print "UP
"; - for(my $i = 1; $i <= 10; $i++) { - $UP[$i] = int($qossettings{'OUT_SPD'} / $i ); - #print $i."=".$UP[$i]." "; - } - my @DOWN; - #print "

Down
"; - for(my $i = 1; $i <= 20; $i++) { - $DOWN[$i] = int($qossettings{'INC_SPD'} / $i); - #print $i."=".$DOWN[$i]." "; - } - open( FILE, "> $classfile" ) or die "Unable to write $classfile"; - print FILE < 0) && ($qossettings{'INC_SPD'} > 0)) { + my @UP; + #print "UP
"; + for(my $i = 1; $i <= 10; $i++) { + $UP[$i] = int($qossettings{'OUT_SPD'} / $i ); + #print $i."=".$UP[$i]." "; + } + my @DOWN; + #print "

Down
"; + for(my $i = 1; $i <= 20; $i++) { + $DOWN[$i] = int($qossettings{'INC_SPD'} / $i); + #print $i."=".$DOWN[$i]." "; + } + open( FILE, "> $classfile" ) or die "Unable to write $classfile"; + print FILE < $level7file" ) or die "Unable to write $level7file"; - print FILE < $level7file" ) or die "Unable to write $level7file"; + print FILE < $portfile" ) or die "Unable to write $portfile"; - print FILE < $portfile" ) or die "Unable to write $portfile"; + print FILE </dev/null 2>&1"); + system("/usr/local/bin/qosctrl start >/dev/null 2>&1"); + system("logger -t ipfire 'QoS started'"); + } else { + $message = $Lang::tr{'qos enter bandwidths'}; } - $qossettings{'DEFCLASS_INC'} = "210"; - $qossettings{'DEFCLASS_OUT'} = "110"; - $qossettings{'ACK'} ="101"; - system("/usr/local/bin/qosctrl generate >/dev/null 2>&1"); - system("/usr/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 'Statusinformationen') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'status'} ) { &Header::openbox('100%', 'left', 'QoS Status'); if ($qossettings{'ENABLED'} eq 'on'){ @@ -592,30 +605,30 @@ elsif ($qossettings{'ACTION'} eq 'Statusinformationen') &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Parentklasse hinzufuegen') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'parentclass add'} ) { &parentclass(); &Header::closebigbox(); &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Unterklasse hinzufuegen') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'qos add subclass'}) { &subclass(); &Header::closebigbox(); &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Regel hinzufuegen') +elsif ($qossettings{'ACTION'} eq $Lang::tr{'Add Rule'}) { &Header::openbox('100%', 'center', $Lang::tr{'Add Rule'}); print < $Lang::tr{'Choose Rule'} - - - + + + END ; @@ -645,21 +658,14 @@ END &Header::closepage(); exit } -elsif ($qossettings{'ACTION'} eq 'Erweiterte Einstellungen') -{ - &expert(); - &Header::closebigbox(); - &Header::closepage(); - exit -} -if ($qossettings{'ACTIONBW'} eq 'Andern') +if ($qossettings{'ACTIONBW'} eq "$Lang::tr{'modify'}" ) { &changebandwidth(); &Header::closebigbox(); &Header::closepage(); exit } -if ($qossettings{'ACTIONDEF'} eq 'Andern') +if ($qossettings{'ACTIONDEF'} eq "$Lang::tr{'modify'}" ) { &changedefclasses(); &Header::closebigbox(); @@ -690,7 +696,7 @@ if ($errormessage) { ############################################################################################################################ ############################################################################################################################ -&Header::openbox('100%', 'center', 'Quality of Service'); +&Header::openbox('100%', 'center', ); print < @@ -698,15 +704,18 @@ print <$message"; + print "$message"; } print <Quality of Service: - $status - - - - + Quality of Service: + $status + +
+ + + + + END ; if (($qossettings{'OUT_SPD'} ne '') && ($qossettings{'INC_SPD'} ne '')) { @@ -715,7 +724,7 @@ END
 
$Lang::tr{'downlink speed'}: $qossettings{'INC_SPD'} - +
$Lang::tr{'uplink speed'}: $qossettings{'OUT_SPD'}
END @@ -727,7 +736,7 @@ END

$Lang::tr{'downlink std class'}: $qossettings{'DEFCLASS_INC'} - +
$Lang::tr{'uplink std class'}: $qossettings{'DEFCLASS_OUT'}
ACKs: $qossettings{'ACK'}

@@ -735,11 +744,11 @@ END
- -
- - -
+ +
+ + +
END ; @@ -760,28 +769,12 @@ if ( ($qossettings{'DEFCLASS_INC'} eq '') || ($qossettings{'DEFCLASS_OUT'} eq '' exit } -&Header::openbox('100%', 'center', $Lang::tr{'info'}); -&Graphs::overviewgraph("3240",$qossettings{'RED_DEV'}); -&Graphs::overviewgraph("3240",$qossettings{'IMQ_DEV'}); -print < -  $Lang::tr{'add subclass'} |  $Lang::tr{'Add Rule'} |  $Lang::tr{'edit'} |  $Lang::tr{'delete'}   - $Lang::tr{'TOS Bits'}:  0 - $Lang::tr{'disabled'} | 8 - $Lang::tr{'min delay'} | 4 - $Lang::tr{'max throughput'} | 2 - $Lang::tr{'max reliability'} | 1 - $Lang::tr{'min costs'}   -END -; -if (( -e "/srv/web/ipfire/html/graphs/qos-graph-$qossettings{'RED_DEV'}-3240.png") && ( -e "/srv/web/ipfire/html/graphs/qos-graph-$qossettings{'IMQ_DEV'}-3240.png")) { - print < - -END -;} -else -{ -print "\t
".$Lang::tr{'no information available'}; -} -print "\t"; - -&Header::closebox(); + &Header::openbox('100%', 'center', "$qossettings{'RED_DEV'} $Lang::tr{'graph'}, $Lang::tr{'uplink'}"); + &Graphs::makegraphbox("qos.cgi",$qossettings{'RED_DEV'},"hour"); + &Header::closebox(); + &Header::openbox('100%', 'center', "$qossettings{'IMQ_DEV'} $Lang::tr{'graph'}, $Lang::tr{'downlink'}"); + &Graphs::makegraphbox("qos.cgi",$qossettings{'IMQ_DEV'},"hour"); + &Header::closebox(); &showclasses($qossettings{'RED_DEV'}); &showclasses($qossettings{'IMQ_DEV'}); @@ -789,6 +782,8 @@ print "\t"; &Header::closebigbox(); &Header::closepage(); +} + ############################################################################################################################ ############################################################################################################################ @@ -798,7 +793,7 @@ sub changedefclasses {
$Lang::tr{'no filter pass'} -
Download:
$Lang::tr{'download'}:  -
Upload:
$Lang::tr{'upload'}:
$Lang::tr{'guaranteed bandwith'}:   -
$Lang::tr{'max bandwith'}: +
$Lang::tr{'max bandwith'} *:  
Burst: @@ -962,8 +957,8 @@ print <$Lang::tr{'min costs'} (1)  
$Lang::tr{'remark'}: - -
  + +
* $Lang::tr{'required field'}    
@@ -1081,11 +1076,12 @@ END print <  $Lang::tr{'source ip'}: - +   $Lang::tr{'destination ip'}: - + + $Lang::tr{'qos warning'} END ; @@ -1118,16 +1114,16 @@ END print <  $Lang::tr{'source port'}: - +   $Lang::tr{'destination port'}: - +   $Lang::tr{'source ip'}: - +   $Lang::tr{'destination ip'}: - + END @@ -1185,7 +1181,7 @@ sub showclasses { @classline = split( /\;/, $classentry ); if ( $classline[0] eq $qossettings{'DEV'} ) { - &Header::openbox('100%', 'center', "Klasse: $classline[1]"); + &Header::openbox('100%', 'center', "$Lang::tr{'Class'}: $classline[1] $classline[8]"); print < $Lang::tr{'interface'} @@ -1209,23 +1205,23 @@ sub showclasses {
- - + +
- - + +
- - + +
- - + +
@@ -1249,14 +1245,14 @@ END
- - + +
- - + +
END @@ -1292,14 +1288,14 @@ END ; if ($portruleline[4]) { print <Quell-Port: $portruleline[4] + $Lang::tr{'source port'}: $portruleline[4] END ; } print ""; if ($portruleline[6]) { print <Ziel-Port: $portruleline[6] + $Lang::tr{'destination port'}: $portruleline[6] END ; } @@ -1314,8 +1310,8 @@ END - - + +
@@ -1324,8 +1320,8 @@ END - - + +
END @@ -1372,15 +1368,15 @@ END - - + +
- - + +
END @@ -1407,18 +1403,18 @@ END
- - + +
- - + +
- - + +
END @@ -1434,29 +1430,6 @@ END } } } - -sub expert -{ - &Header::openbox('100%', 'center', $Lang::tr{'expertoptions'}); - print < - -
MTU: - - $Lang::tr{'mtu QoS'} -
$Lang::tr{'Queuelenght'}: - -   -
SFQ Perturb: - - -
- -END -; - &Header::closebox(); -} - sub validminbwdth { if ( $qossettings{'VALID'} eq 'yes' ) { if ( $qossettings{'DEVICE'} eq $qossettings{'RED_DEV'} ) { @@ -1497,7 +1470,7 @@ sub validclass { } elsif ( $qossettings{'DEVICE'} eq $qossettings{'IMQ_DEV'} ) { if ($qossettings{'CLASS'} lt 200 || $qossettings{'CLASS'} ge 221) { $qossettings{'VALID'} = 'no'; - $message = "Die Klassennummer passt nicht zum angegebenen Interface."; + $message = "$Lang::tr{'The class number does not match the specified interface.'}"; } } open( FILE, "< $classfile" ) or die "Unable to read $classfile";