END
;
&Header::closebox();
print <
END
;
&level7rule();
print <
END
;
&portrule();
print <
END
;
&tosrule();
print <
END
;
&Header::closebigbox();
&Header::closepage();
exit
}
elsif ($qossettings{'ACTION'} eq "$Lang::tr{'urlfilter advanced settings'}" )
{
&expert();
&Header::closebigbox();
&Header::closepage();
exit
}
if ($qossettings{'ACTIONBW'} eq "$Lang::tr{'modify'}" )
{
&changebandwidth();
&Header::closebigbox();
&Header::closepage();
exit
}
if ($qossettings{'ACTIONDEF'} eq "$Lang::tr{'modify'}" )
{
&changedefclasses();
&Header::closebigbox();
&Header::closepage();
exit
}
&General::readhash("${General::swroot}/qos/settings", \%qossettings);
my $status = $Lang::tr{'stopped'};
my $statuscolor = '#993333';
if ( $qossettings{'ENABLED'} eq 'on' ) {
$status = $Lang::tr{'running'};
$statuscolor = '#339933';
}
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 <
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 <
END
;
}
&Header::closebox();
if ( ($qossettings{'OUT_SPD'} eq '') || ($qossettings{'INC_SPD'} eq '') ) {
&changebandwidth();
&Header::closebigbox();
&Header::closepage();
exit
}
if ( ($qossettings{'DEFCLASS_INC'} eq '') || ($qossettings{'DEFCLASS_OUT'} eq '') || ($qossettings{'ACK'} eq '') ) {
&changedefclasses();
&Header::closebigbox();
&Header::closepage();
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();
&showclasses($qossettings{'RED_DEV'});
&showclasses($qossettings{'IMQ_DEV'});
&Header::closebigbox();
&Header::closepage();
############################################################################################################################
############################################################################################################################
sub changedefclasses {
&Header::openbox('100%', 'center', $Lang::tr{'std classes'});
print <
$Lang::tr{'no filter pass'}
Download:
END
;
for ( $c = 200 ; $c <= 220 ; $c++ )
{
if ( $qossettings{'DEFCLASS_INC'} ne $c )
{ print "$c \n"; }
else { print "$c \n"; }
}
print <
Upload:
END
;
for ( $c = 100 ; $c <= 120 ; $c++ )
{
if ( $qossettings{'DEFCLASS_OUT'} ne $c )
{ print "$c \n"; }
else { print "$c \n"; }
}
print <
END
;
&Header::closebox();
}
sub changebandwidth {
&Header::openbox('100%', 'center', $Lang::tr{'bandwithsettings'});
if ($qossettings{'ENABLED'} eq 'on') {
print "$Lang::tr{'bandwitherror'}";
print "$Lang::tr{'back'} ";
} else {
print <
$Lang::tr{'template warning'}
END
;
}
&Header::closebox();
}
sub parentclass {
&Header::openbox('100%', 'center', $Lang::tr{'parentclass'});
print <
END
;
&Header::closebox();
}
sub subclass {
&Header::openbox('100%', 'center', $Lang::tr{'Subclass'});
print <
END
;
&Header::closebox();
}
sub level7rule {
&Header::openbox('100%', 'center', $Lang::tr{'Level7 Rule'});
print <
END
;
&Header::closebox();
}
sub portrule {
&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
;
&Header::closebox();
}
sub showclasses {
$qossettings{'DEV'} = shift;
open( FILE, "< $classfile" ) or die "Unable to read $classfile";
@classes = ;
close FILE;
if (@classes) {
open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
@subclasses = ;
close FILE;
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{'DEV'} )
{
&Header::openbox('100%', 'center', "Klasse: $classline[1]");
print <
$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
;
if (@l7rules) {
foreach $l7ruleentry (sort @l7rules)
{
@l7ruleline = split( /\;/, $l7ruleentry );
if ( $l7ruleline[0] eq $classline[1] )
{
print <$Lang::tr{'Level7 Protocol'}:
$l7ruleline[2]
END
;
if (($l7ruleline[3] ne "") || ($l7ruleline[4] ne "")){
print <
$Lang::tr{'source ip'}: $l7ruleline[3]
$Lang::tr{'destination ip'}: $l7ruleline[4]
END
;
}
END
;
}
}
}
if (@portrules) {
foreach $portruleentry (sort @portrules)
{
@portruleline = split( /\;/, $portruleentry );
if ( $portruleline[0] eq $classline[1] )
{
print <$Lang::tr{'Port Rule'}:
($portruleline[2])
END
;
if ($portruleline[4]) {
print <$Lang::tr{'source port'}: $portruleline[4]
END
;
}
print "";
if ($portruleline[6]) {
print <$Lang::tr{'destination port'}: $portruleline[6]
END
;
}
print <
END
;
if (($portruleline[3] ne "") || ($portruleline[5] ne "")){
print <
$Lang::tr{'source ip'}: $portruleline[3]
$Lang::tr{'destination ip'}: $portruleline[5]
END
;
}
}
}
}
if (@tosrules) {
foreach $tosruleentry (sort @tosrules)
{
@tosruleline = split( /\;/, $tosruleentry );
if ( $tosruleline[0] eq $classline[1] )
{
print <
TOS Bit matches:
END
;
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
;
}
}
}
END
;
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
;
}
}
print <
END
;
&Header::closebox();
}
}
}
}
sub expert
{
&Header::openbox('100%', 'center', $Lang::tr{'expertoptions'});
print <
END
;
&Header::closebox();
}
sub validminbwdth {
if ( $qossettings{'VALID'} eq 'yes' ) {
if ( $qossettings{'DEVICE'} eq $qossettings{'RED_DEV'} ) {
$qossettings{'SPD'} = $qossettings{'OUT_SPD'};
} elsif ( $qossettings{'DEVICE'} eq $qossettings{'IMQ_DEV'} ) {
$qossettings{'SPD'} = $qossettings{'INC_SPD'};
}
unless ( ( $qossettings{'MINBWDTH'} >= 1 ) && ( $qossettings{'MINBWDTH'} <= $qossettings{'SPD'} ) ) {
$qossettings{'VALID'} = 'no';
$message = "$Lang::tr{'false min bandwith'}";
}
$qossettings{'SPD'} = '';
}
}
sub validmaxbwdth {
if ( $qossettings{'VALID'} eq 'yes' ) {
if ( $qossettings{'DEVICE'} eq $qossettings{'RED_DEV'} ) {
$qossettings{'SPD'} = $qossettings{'OUT_SPD'};
} elsif ( $qossettings{'DEVICE'} eq $qossettings{'IMQ_DEV'} ) {
$qossettings{'SPD'} = $qossettings{'INC_SPD'};
}
unless ( ( $qossettings{'MAXBDWTH'} >= 0 ) && ($qossettings{'MAXBDWTH'} >= $qossettings{'MINBDWTH'}) &&( $qossettings{'MAXBDWTH'} <= $qossettings{'SPD'} ) ) {
$qossettings{'VALID'} = 'no';
$message = "$Lang::tr{'false max bandwith'}";
}
$qossettings{'SPD'} = '';
}
}
sub validclass {
if ( $qossettings{'VALID'} eq 'yes' ) {
if ( $qossettings{'DEVICE'} eq $qossettings{'RED_DEV'} ) {
if ($qossettings{'CLASS'} lt 100 || $qossettings{'CLASS'} ge 121) {
$qossettings{'VALID'} = 'no';
$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.";
}
}
open( FILE, "< $classfile" ) or die "Unable to read $classfile";
@tmp = ;
close FILE;
foreach $classentry (sort @tmp)
{
@tmpline = split( /\;/, $classentry );
if ( $tmpline[1] eq $qossettings{'CLASS'} )
{
$qossettings{'VALID'} = 'no';
$message = "$Lang::tr{'false classnumber'}";
last
}
}
}
}
sub validsubclass {
if ( $qossettings{'VALID'} eq 'yes' ) {
open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
@tmp = ;
close FILE;
foreach $subclassentry (sort @tmp)
{
@tmpline = split( /\;/, $subclassentry );
if ( $tmpline[2] eq $qossettings{'SCLASS'} )
{
$qossettings{'VALID'} = 'no';
$message = "$Lang::tr{'class in use'}";
last
}
}
}
}