Diese Seite braucht je nach Geschwindigkeit des Computers laenger zum Laden.
+ 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 <;
close FILE;
- foreach $classentry (sort @classes)
- {
- @classline = split( /\;/, $classentry );
- $qossettings{'DEV'}=$classline[0];
- $qossettings{'CLASS'}=$classline[1];
- &gengraph($qossettings{'DEV'},$qossettings{'CLASS'});
- print <$qossettings{'CLASS'} ($qossettings{'DEV'})
-
-
-
+ open( FILE, "> $level7file" ) or die "Unable to write $level7file";
+ print FILE <
+ close FILE;
+ open( FILE, "> $portfile" ) or die "Unable to write $portfile";
+ print FILE </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'");
+}
+elsif ($qossettings{'ACTION'} eq $Lang::tr{'status'} )
+{
+ &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 "$Lang::tr{'QoS not enabled'}"; }
&Header::closebox();
&Header::closebigbox();
&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 'Level7-Regel hinzufuegen')
+elsif ($qossettings{'ACTION'} eq $Lang::tr{'Add Rule'})
{
- &level7rule();
- &Header::closebigbox();
- &Header::closepage();
- exit
-}
-elsif ($qossettings{'ACTION'} eq 'Port-Regel hinzufuegen')
-{
- &portrule();
+ &Header::openbox('100%', 'center', $Lang::tr{'Add Rule'});
+ print <
+ $Lang::tr{'Choose Rule'}
+
+
+
+
+
+END
+;
+ &Header::closebox();
+ print <
+END
+;
+ &level7rule();
+ print <
+
+END
+;
+ &portrule();
+ print <
+
+END
+;
+ &tosrule();
+ print <
+END
+;
&Header::closebigbox();
&Header::closepage();
exit
}
-elsif ($qossettings{'ACTION'} eq 'Erweiterte Einstellungen')
+elsif ($qossettings{'ACTION'} eq "$Lang::tr{'urlfilter advanced settings'}" )
{
&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();
@@ -484,9 +703,10 @@ if ($errormessage) {
############################################################################################################################
&Header::openbox('100%', 'center', 'Quality of Service');
+
print <
-
+
END
;
if (($qossettings{'OUT_SPD'} ne '') && ($qossettings{'INC_SPD'} ne '')) {
print <
+
END
;
}
if (($qossettings{'DEFCLASS_OUT'} ne '') && ($qossettings{'DEFCLASS_INC'} ne '')&& ($qossettings{'ACK'} ne '')) {
print <
- Downloadstandardklasse: $qossettings{'DEFCLASS_INC'}
-
- Uploadstandardklasse: $qossettings{'DEFCLASS_OUT'}
- ACKs: $qossettings{'ACK'}
-
+
END
;
- &Header::closebox();
+ &Header::closebox();
}
sub changebandwidth {
- &Header::openbox('100%', 'center', 'Bandbreiteneinstellungen');
+ &Header::openbox('100%', 'center', $Lang::tr{'bandwithsettings'});
if ($qossettings{'ENABLED'} eq 'on') {
- print "Sie koennen die Bandbreiteneinstellungen nicht bearbeiten, wenn QoS eingeschaltet ist. Schalten sie es zuerst dazu aus.";
- print "Zurueck ";
+ print "$Lang::tr{'bandwitherror'}";
+ print "$Lang::tr{'back'} ";
} else {
print <
-
+
+ $Lang::tr{'template warning'}
END
;
}
@@ -633,7 +866,7 @@ END
}
sub parentclass {
- &Header::openbox('100%', 'center', 'Parentklasse');
+ &Header::openbox('100%', 'center', $Lang::tr{'parentclass'});
print <
END
;
@@ -719,7 +971,7 @@ END
}
sub subclass {
- &Header::openbox('100%', 'center', 'Unterklasse');
+ &Header::openbox('100%', 'center', $Lang::tr{'Subclass'});
print <
END
;
@@ -784,7 +1046,7 @@ END
}
sub level7rule {
- &Header::openbox('100%', 'center', 'Level7-Regel');
+ &Header::openbox('100%', 'center', $Lang::tr{'Level7 Rule'});
print <
END
;
@@ -829,12 +1092,12 @@ END
}
sub portrule {
- &Header::openbox('100%', 'center', 'Port-Regel hinzufuegen');
+ &Header::openbox('100%', 'center', $Lang::tr{'Add Port Rule'});
print <
+END
+;
+ &Header::closebox();
+}
+
+sub tosrule {
+ &Header::openbox('100%', 'center', $Lang::tr{'TOS Rule'});
+ if ($qossettings{'TOS'}) {
+ $checked{$qossettings{'TOS'}} = "checked";
+ }
+ print <
+
END
;
@@ -872,6 +1162,7 @@ END
}
sub showclasses {
+ $qossettings{'DEV'} = shift;
open( FILE, "< $classfile" ) or die "Unable to read $classfile";
@classes = ;
close FILE;
@@ -879,416 +1170,285 @@ sub showclasses {
open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
@subclasses = ;
close FILE;
- &Header::openbox('100%', 'center', 'Klassen');
- print <
- Interface
- Klasse
- Prioritaet
- Garantierte Bandbreite
- Maximale Bandbreite
- Burst
- Ceil Burst
- Aktionen
-END
-;
+ open( FILE, "< $level7file" ) or die "Unable to read $level7file";
+ @l7rules = ;
+ close FILE;
+ open( FILE, "< $tosfile" ) or die "Unable to read $tosfile";
+ @tosrules = ;
+ close FILE;
+ open( FILE, "< $portfile" ) or die "Unable to read $portfile";
+ @portrules = ;
+ close FILE;
foreach $classentry (sort @classes)
{
@classline = split( /\;/, $classentry );
- if ( $classline[0] eq $qossettings{'RED_DEV'} )
+ if ( $classline[0] eq $qossettings{'DEV'} )
{
+ &Header::openbox('100%', 'center', "$Lang::tr{'Class'}: $classline[1]");
print <$classline[0]
- $classline[1]
- $classline[2]
- $classline[3]
- $classline[4]
- $classline[5]
- $classline[6]
-
+
+ $Lang::tr{'interface'}
+ $Lang::tr{'Class'}
+ $Lang::tr{'priority'}
+ $Lang::tr{'guaranteed bandwith'}
+ $Lang::tr{'max bandwith'}
+ Burst
+ Ceil Burst
+ TOS
+ $Lang::tr{'action'}
+ $classline[0]
+ $classline[1]
+ $classline[2]
+ $classline[3]
+ $classline[4]
+ $classline[5]
+ $classline[6]
+ $classline[7]
+
+
+ $Lang::tr{'remark'}:
+ $classline[8]
+ Queueing: $classline[9]
END
;
- foreach $subclassentry (sort @subclasses)
- {
- @subclassline = split( /\;/, $subclassentry );
- if ( $subclassline[1] eq $classline[1] ) {
- print <Subklasse:
- $subclassline[2]
- $subclassline[3]
- $subclassline[4]
- $subclassline[5]
- $subclassline[6]
- $subclassline[7]
-
-
-END
-;
- }
- }
- }
- }
- print "\t ";
- foreach $classentry (sort @classes)
- {
- @classline = split( /\;/, $classentry );
- if ( $classline[0] eq $qossettings{'IMQ_DEV'} )
- {
- print <$classline[0]
- $classline[1]
- $classline[2]
- $classline[3]
- $classline[4]
- $classline[5]
- $classline[6]
-
+
+ if (@l7rules) {
+ foreach $l7ruleentry (sort @l7rules)
+ {
+ @l7ruleline = split( /\;/, $l7ruleentry );
+ if ( $l7ruleline[0] eq $classline[1] )
+ {
+ print <$Lang::tr{'Level7 Protocol'}:
+ $l7ruleline[2]
+
END
;
- foreach $subclassentry (sort @subclasses)
- {
- @subclassline = split( /\;/, $subclassentry );
- if ( $subclassline[1] eq $classline[1] ) {
- print <Subklasse:
- $subclassline[2]
- $subclassline[3]
- $subclassline[4]
- $subclassline[5]
- $subclassline[6]
- $subclassline[7]
-
-
+ if (($l7ruleline[3] ne "") || ($l7ruleline[4] ne "")){
+ print <
+ $Lang::tr{'source ip'}: $l7ruleline[3]
+ $Lang::tr{'destination ip'}: $l7ruleline[4]
END
;
- }
- }
- }
- }
- print <Legende: Klasse bearbeiten | Unterklasse hinzufuegen | Level7-Regel hinzufuegen | Port-Regel hinzufuegen | Klasse loeschen
-
+ }
+
+
END
;
- &Header::closebox();
- }
-}
+ }
+ }
+ }
-sub showl7rules {
- open( FILE, "< $level7file" ) or die "Unable to read $level7file";
- @l7rules = ;
- close FILE;
- if (@l7rules) {
- &Header::openbox('100%', 'center', 'Level7-Regeln');
- print <
- Interface
- Klasse
- Protokoll
- Quell-IP-Adresse
- Ziel-IP-Adresse
- Aktionen
+
+ if (@portrules) {
+ foreach $portruleentry (sort @portrules)
+ {
+ @portruleline = split( /\;/, $portruleentry );
+ if ( $portruleline[0] eq $classline[1] )
+ {
+ print <$Lang::tr{'Port Rule'}:
+ ($portruleline[2])
+
END
;
- foreach $l7ruleentry (sort @l7rules)
- {
- @l7ruleline = split( /\;/, $l7ruleentry );
- if ( $l7ruleline[1] eq $qossettings{'RED_DEV'} )
- {
- print <$l7ruleline[1]
- $l7ruleline[0]
- $l7ruleline[2]
- $l7ruleline[3]
- $l7ruleline[4]
-
-
+ if ($portruleline[4]) {
+ print <$Lang::tr{'source port'}: $portruleline[4]
END
;
- }
- }
- print "\t";
- foreach $l7ruleentry (sort @l7rules)
- {
- @l7ruleline = split( /\;/, $l7ruleentry );
- if ( $l7ruleline[1] eq $qossettings{'IMQ_DEV'} )
- {
- print <$l7ruleline[1]
- $l7ruleline[0]
- $l7ruleline[2]
- $l7ruleline[3]
- $l7ruleline[4]
-
-
+ }
+ print "";
+ if ($portruleline[6]) {
+ print <$Lang::tr{'destination port'}: $portruleline[6]
+END
+;
+ }
+ print <
+
+
+
END
;
- }
- }
- print <Legende: Regel bearbeiten | Regel loeschen
-
+ if (($portruleline[3] ne "") || ($portruleline[5] ne "")){
+ print <
+ $Lang::tr{'source ip'}: $portruleline[3]
+ $Lang::tr{'destination ip'}: $portruleline[5]
END
;
- &Header::closebox();
- }
-}
+ }
+ }
+ }
+ }
-sub showportrules {
- open( FILE, "< $portfile" ) or die "Unable to read $portfile";
- @portrules = ;
- close FILE;
- if (@portrules) {
- &Header::openbox('100%', 'center', 'Port-Regeln');
- print <
- Interface
- Klasse
- Protokoll
- Quell-IP-Adresse
- Quell-Port
- Ziel-IP-Adresse
- Ziel-Port
- Aktionen
+ if (@tosrules) {
+ foreach $tosruleentry (sort @tosrules)
+ {
+ @tosruleline = split( /\;/, $tosruleentry );
+ if ( $tosruleline[0] eq $classline[1] )
+ {
+ print <
+ TOS Bit matches:
+
END
;
- foreach $portruleentry (sort @portrules)
- {
- @portruleline = split( /\;/, $portruleentry );
- if ( $portruleline[1] eq $qossettings{'RED_DEV'} )
- {
- print <$portruleline[1]
- $portruleline[0]
- $portruleline[2]
- $portruleline[3]
- $portruleline[4]
- $portruleline[5]
- $portruleline[6]
-
-
+ if ( $tosruleline[2] eq "8") {
+ print "$Lang::tr{'min delay'}\n";
+ } elsif ( $tosruleline[2] eq "4") {
+ print "$Lang::tr{'max throughput'}\n";
+ } elsif ( $tosruleline[2] eq "2") {
+ print "$Lang::tr{'max reliability'}\n";
+ } elsif ( $tosruleline[2] eq "1") {
+ print "$Lang::tr{'min costs'}\n";
+ } else { print " \n"; }
+
+ print <
+
END
;
- }
- }
- print "\t";
- foreach $portruleentry (sort @portrules)
- {
- @portruleline = split( /\;/, $portruleentry );
- if ( $portruleline[1] eq $qossettings{'IMQ_DEV'} )
- {
- print <$portruleline[1]
- $portruleline[0]
- $portruleline[2]
- $portruleline[3]
- $portruleline[4]
- $portruleline[5]
- $portruleline[6]
-
-
+ }
+ }
+ }
END
;
- }
- }
- print <Legende: Regel bearbeiten | Regel loeschen
-
+ foreach $subclassentry (sort @subclasses)
+ {
+ @subclassline = split( /\;/, $subclassentry );
+ if ( $subclassline[1] eq $classline[1] ) {
+ print <$Lang::tr{'Subclass'}:
+ $subclassline[2]
+ $subclassline[3]
+ $subclassline[4]
+ $subclassline[5]
+ $subclassline[6]
+ $subclassline[7]
+ $subclassline[8]
+
+
END
;
- &Header::closebox();
+ }
+ }
+ print <
+END
+;
+ &Header::closebox();
+ }
+ }
+ }
}
-}
sub expert
{
- &Header::openbox('100%', 'center', 'Expertenoptionen:');
+ &Header::openbox('100%', 'center', $Lang::tr{'expertoptions'});
print <
-
-
END
@@ -1303,9 +1463,9 @@ sub validminbwdth {
} elsif ( $qossettings{'DEVICE'} eq $qossettings{'IMQ_DEV'} ) {
$qossettings{'SPD'} = $qossettings{'INC_SPD'};
}
- unless ( ( $qossettings{'MINBDWTH'} >= 0 ) && ( $qossettings{'MINBDWTH'} <= $qossettings{'SPD'} ) ) {
+ unless ( ( $qossettings{'MINBWDTH'} >= 1 ) && ( $qossettings{'MINBWDTH'} <= $qossettings{'SPD'} ) ) {
$qossettings{'VALID'} = 'no';
- $message = "Mindestbandbreite ist ungueltig.";
+ $message = "$Lang::tr{'false min bandwith'}";
}
$qossettings{'SPD'} = '';
}
@@ -1320,7 +1480,7 @@ sub validmaxbwdth {
}
unless ( ( $qossettings{'MAXBDWTH'} >= 0 ) && ($qossettings{'MAXBDWTH'} >= $qossettings{'MINBDWTH'}) &&( $qossettings{'MAXBDWTH'} <= $qossettings{'SPD'} ) ) {
$qossettings{'VALID'} = 'no';
- $message = "Mamimalbandbreite ist ungueltig.";
+ $message = "$Lang::tr{'false max bandwith'}";
}
$qossettings{'SPD'} = '';
}
@@ -1331,12 +1491,12 @@ sub validclass {
if ( $qossettings{'DEVICE'} eq $qossettings{'RED_DEV'} ) {
if ($qossettings{'CLASS'} lt 100 || $qossettings{'CLASS'} ge 121) {
$qossettings{'VALID'} = 'no';
- $message = "Die Klassennummer passt nicht zum angegebenen Interface.";
+ $message = "$Lang::tr{'false classnumber'}";
}
} 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";
@@ -1348,7 +1508,7 @@ sub validclass {
if ( $tmpline[1] eq $qossettings{'CLASS'} )
{
$qossettings{'VALID'} = 'no';
- $message = "Die aktuelle Klasse wird bereits verwendet.";
+ $message = "$Lang::tr{'false classnumber'}";
last
}
}
@@ -1366,80 +1526,9 @@ sub validsubclass {
if ( $tmpline[2] eq $qossettings{'SCLASS'} )
{
$qossettings{'VALID'} = 'no';
- $message = "Die aktuelle Klasse wird bereits verwendet.";
+ $message = "$Lang::tr{'class in use'}";
last
}
}
}
}
-
-sub gengraph {
- $qossettings{'DEV'} = shift;
- $qossettings{'CLASS'} = shift;
- my $ERROR="";
- if ( $qossettings{'DEV'} eq $qossettings{'RED_DEV'} ) {
- $qossettings{'CLASSPRFX'} = '1';
- } else {
- $qossettings{'CLASSPRFX'} = '2';
- }
-
- RRDs::graph ("/home/httpd/html/graphs/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}-packets.png",
- "--start", "-3240", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 800", "-h 150", "-r",
- "--color", "SHADEA#EAE9EE",
- "--color", "SHADEB#EAE9EE",
- "--color", "BACK#FFFFFF",
- "-t $qossettings{'CLASS'} ($qossettings{'DEV'})",
- "DEF:pkts=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:pkts:AVERAGE",
- "DEF:dropped=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:dropped:AVERAGE",
- "DEF:overlimits=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:overlimits:AVERAGE",
- "AREA:pkts#00FFFF:packets",
- "GPRINT:pkts:LAST:total packets\\:%8.3lf %s packets\\j",
- "LINE3:dropped#FF0000:dropped",
- "GPRINT:dropped:LAST:dropped packets\\:%8.3lf %s packets\\j",
- "LINE3:overlimits#0000FF:overlimits",
- "GPRINT:overlimits:LAST:overlimits\\:%8.3lf %s packets\\j",
- );
- $ERROR = RRDs::error;
- print "$ERROR";
-
- RRDs::graph ("/home/httpd/html/graphs/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}-borrowed.png",
- "--start", "-3240", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 800", "-h 150", "-r",
- "--color", "SHADEA#EAE9EE",
- "--color", "SHADEB#EAE9EE",
- "--color", "BACK#FFFFFF",
- "-t $qossettings{'CLASS'} ($qossettings{'DEV'})",
- "DEF:lended=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:lended:AVERAGE",
- "DEF:borrowed=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:borrowed:AVERAGE",
- "DEF:giants=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:giants:AVERAGE",
- "AREA:lended#99ff99:lended",
- "GPRINT:lended:LAST:lended\\:%8.3lf %s packets\\j",
- "LINE3:borrowed#f70566:borrowed",
- "GPRINT:borrowed:LAST:borrowed\\:%8.3lf %s packets\\j",
- "LINE3:giants#05ad05:giants",
- "GPRINT:giants:LAST:giants\\:%8.3lf %s packets\\j",
- );
- $ERROR = RRDs::error;
- print "$ERROR";
-
- RRDs::graph ("/home/httpd/html/graphs/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}-bytes.png",
- "--start", "-3240", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 800", "-h 150", "-r",
- "--color", "SHADEA#EAE9EE",
- "--color", "SHADEB#EAE9EE",
- "--color", "BACK#FFFFFF",
- "-t $qossettings{'CLASS'} ($qossettings{'DEV'})",
- "DEF:bits=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:bits:AVERAGE",
- "DEF:bytes=/var/log/rrd/class_$qossettings{'CLASSPRFX'}-$qossettings{'CLASS'}_$qossettings{'DEV'}.rrd:bytes:AVERAGE",
- "CDEF:kbytes=bytes,1024,/",
- "CDEF:kbits=bits,1024,/,8,/",
- "AREA:kbytes#FFBE7D:kbytes",
- "GPRINT:kbytes:LAST:rate\\: %8.3lf kbytes\\j",
- "GPRINT:kbits:LAST:rate\\:%8.2lf kbits\\r",
- );
- $ERROR = RRDs::error;
- print "$ERROR";
-
-
-}
\ No newline at end of file