+}
+
+sub portrule {
+ &Header::openbox('100%', 'center', 'Port-Regel hinzufuegen');
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <table width='66%'>
+ <tr><td width='100%' colspan='3'>Geben sie die Daten ein <br> und klicken Sie danach auf <i>Speichern</i>.
+ <tr><td width='33%' align='right'>Name:
+ <td width='33%' align='left'><input type='text' name='NAME' maxlength='20' value=$qossettings{'NAME'}>
+ <td width='33%' align='center'>
+ <tr><td width='33%' align='right'>Protokoll:
+ <td width='33%' align='left'><select name='PPROT'>
+END
+;
+ open( FILE, "< /etc/protocols" );
+ @proto = <FILE>;
+ close FILE;
+ foreach $direntry (sort @proto)
+ {
+ @tmpline = split( /\ /, $direntry );
+ next if $tmpline[0] =~ "#";
+ if ( $tmpline[0] eq $qossettings{'PPROT'} ) {
+ print "<option value='$tmpline[0]' selected>$tmpline[0]</option>\n";
+ } else {
+ print "<option value='$tmpline[0]'>$tmpline[0]</option>\n";
+ }
+ }
+ print <<END
+ </select><td width='33%' align='center'>
+ <tr><td width='33%' align='right'>Quell-Port:
+ <td width='33%' align='left'><input type='text' name='QPORT' maxlength='5' value=$qossettings{'QPORT'}>
+ <td width='33%' align='center'>
+ <tr><td width='33%' align='right'>Ziel-Port:
+ <td width='33%' align='left'><input type='text' name='DPORT' maxlength='5' value=$qossettings{'DPORT'}>
+ <td width='33%' align='center'>
+ <tr><td width='33%' align='right'>Quell-IP-Adresse:
+ <td width='33%' align='left'><input type='text' name='QIP' maxlength='15' value=$qossettings{'QIP'}>
+ <td width='33%' align='center'>
+ <tr><td width='33%' align='right'>Ziel-IP-Adresse:
+ <td width='33%' align='left'><input type='text' name='DIP' maxlength='15' value=$qossettings{'DIP'}>
+ <td width='33%' align='center'><input type='hidden' name='CLASS' value='$qossettings{'CLASS'}><input type='submit' name='ACTION' value=$Lang::tr{'save'} />
+ </table></form>
+END
+;
+ &Header::closebox();
+}
+
+sub showclasses {
+ open( FILE, "< $classfile" ) or die "Unable to read $classfile";
+ @classes = <FILE>;
+ close FILE;
+ if (@classes) {
+ open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
+ @subclasses = <FILE>;
+ close FILE;
+ &Header::openbox('100%', 'center', 'Klassen');
+ print <<END
+ <table border='0' width='100%' cellspacing='0'>
+ <tr><td bgcolor='lightgrey' width='10%'>Interface
+ <td bgcolor='lightgrey' width='10%'>Klasse
+ <td bgcolor='lightgrey' width='10%'>Prioritaet
+ <td bgcolor='lightgrey' width='10%'>Garantierte Bandbreite
+ <td bgcolor='lightgrey' width='10%'>Maximale Bandbreite
+ <td bgcolor='lightgrey' width='10%'>Burst
+ <td bgcolor='lightgrey' width='10%'>Ceil Burst
+ <td bgcolor='lightgrey' width='30%'>Aktionen
+END
+;
+ foreach $classentry (sort @classes)
+ {
+ @classline = split( /\;/, $classentry );
+ if ( $classline[0] eq $qossettings{'RED_DEV'} )
+ {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#EAEAEA'>$classline[0]
+ <td align='center' bgcolor='#EAEAEA'>$classline[1]
+ <td align='center' bgcolor='#EAEAEA'>$classline[2]
+ <td align='center' bgcolor='#EAEAEA'>$classline[3]
+ <td align='center' bgcolor='#EAEAEA'>$classline[4]
+ <td align='center' bgcolor='#EAEAEA'>$classline[5]
+ <td align='center' bgcolor='#EAEAEA'>$classline[6]
+ <td align='right' bgcolor='#EAEAEA'><input type='hidden' name='CLASS' value='$classline[1]'>
+ <button type='submit' name='DO_CLASS' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='ACTION' value='Unterklasse hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addblue.gif' width="20" height="20" alt="Unterklasse hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Level7-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addgreen.gif' width="20" height="20" alt="Level7-Regel hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Port-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/add.gif' width="20" height="20" alt="Port-Regel hinzufuegen"></button>
+ <button type='submit' name='DO_CLASS' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ foreach $subclassentry (sort @subclasses)
+ {
+ @subclassline = split( /\;/, $subclassentry );
+ if ( $subclassline[1] eq $classline[1] ) {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#FFFFFF'>Subklasse:
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[2]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[3]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[4]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[5]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[6]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[7]
+ <td align='right' bgcolor='#FAFAFA'><input type='hidden' name='CLASS' value='$subclassline[2]'>
+ <button type='submit' name='DO_SCLASS' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='ACTION' value='Level7-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addgreen.gif' width="20" height="20" alt="Level7-Regel hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Port-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/add.gif' width="20" height="20" alt="Port-Regel hinzufuegen"></button>
+ <button type='submit' name='DO_SCLASS' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ }
+ }
+ }
+ }
+ print "\t<tr><td colspan='8' bgcolor='lightgrey' height='2'>";
+ foreach $classentry (sort @classes)
+ {
+ @classline = split( /\;/, $classentry );
+ if ( $classline[0] eq $qossettings{'IMQ_DEV'} )
+ {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#EAEAEA'>$classline[0]
+ <td align='center' bgcolor='#EAEAEA'>$classline[1]
+ <td align='center' bgcolor='#EAEAEA'>$classline[2]
+ <td align='center' bgcolor='#EAEAEA'>$classline[3]
+ <td align='center' bgcolor='#EAEAEA'>$classline[4]
+ <td align='center' bgcolor='#EAEAEA'>$classline[5]
+ <td align='center' bgcolor='#EAEAEA'>$classline[6]
+ <td align='right' bgcolor='#EAEAEA'><input type='hidden' name='CLASS' value='$classline[1]'>
+ <button type='submit' name='DO_CLASS' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='ACTION' value='Unterklasse hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addblue.gif' width="20" height="20" alt="Unterklasse hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Level7-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addgreen.gif' width="20" height="20" alt="Level7-Regel hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Port-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/add.gif' width="20" height="20" alt="Port-Regel hinzufuegen"></button>
+ <button type='submit' name='DO_CLASS' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ foreach $subclassentry (sort @subclasses)
+ {
+ @subclassline = split( /\;/, $subclassentry );
+ if ( $subclassline[1] eq $classline[1] ) {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#FFFFFF'>Subklasse:
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[2]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[3]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[4]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[5]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[6]
+ <td align='center' bgcolor='#FAFAFA'>$subclassline[7]
+ <td align='right' bgcolor='#FAFAFA'><input type='hidden' name='CLASS' value='$subclassline[2]'>
+ <button type='submit' name='DO_SCLASS' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='ACTION' value='Level7-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/addgreen.gif' width="20" height="20" alt="Level7-Regel hinzufuegen"></button>
+ <button type='submit' name='ACTION' value='Port-Regel hinzufuegen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/add.gif' width="20" height="20" alt="Port-Regel hinzufuegen"></button>
+ <button type='submit' name='DO_SCLASS' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ }
+ }
+ }
+ }
+ print "\t</table>\n";
+ &Header::closebox();
+ }
+}
+
+sub showl7rules {
+ open( FILE, "< $level7file" ) or die "Unable to read $level7file";
+ @l7rules = <FILE>;
+ close FILE;
+ if (@l7rules) {
+ &Header::openbox('100%', 'center', 'Level7-Regeln');
+ print <<END
+ <table border='0' width='100%' cellspacing='0'>
+ <tr><td bgcolor='lightgrey' width='14%'>Interface
+ <td bgcolor='lightgrey' width='14%'>Klasse
+ <td bgcolor='lightgrey' width='14%'>Protokoll
+ <td bgcolor='lightgrey' width='14%'>Quell-IP-Adresse
+ <td bgcolor='lightgrey' width='14%'>Ziel-IP-Adresse
+ <td bgcolor='lightgrey' width='30%'>Aktionen
+END
+;
+ foreach $l7ruleentry (sort @l7rules)
+ {
+ @l7ruleline = split( /\;/, $l7ruleentry );
+ if ( $l7ruleline[1] eq $qossettings{'RED_DEV'} )
+ {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#EAEAEA'>$l7ruleline[1]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[0]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[2]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[3]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[4]
+ <td align='right' bgcolor='#EAEAEA'><input type='hidden' name='CLASS' value='$l7ruleline[0]'><input type='hidden' name='L7PROT' value='$l7ruleline[2]'>
+ <button type='submit' name='DO_LEVEL7' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='DO_LEVEL7' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ }
+ }
+ print "\t<tr><td colspan='8' bgcolor='lightgrey' height='2'>";
+ foreach $l7ruleentry (sort @l7rules)
+ {
+ @l7ruleline = split( /\;/, $l7ruleentry );
+ if ( $l7ruleline[1] eq $qossettings{'IMQ_DEV'} )
+ {
+ print <<END
+ <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+ <tr><td align='center' bgcolor='#EAEAEA'>$l7ruleline[1]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[0]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[2]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[3]
+ <td align='center' bgcolor='#EAEAEA'>$l7ruleline[4]
+ <td align='right' bgcolor='#EAEAEA'><input type='hidden' name='CLASS' value='$l7ruleline[0]'><input type='hidden' name='L7PROT' value='$l7ruleline[2]'>
+ <button type='submit' name='DO_LEVEL7' value='Bearbeiten' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/edit.gif' width="20" height="20" alt="Klasse bearbeiten"></button>
+ <button type='submit' name='DO_LEVEL7' value='Loeschen' class='btnOff' onmouseover='BorderOn(this)' onmouseout='BorderOff(this)'><img src='/images/delete.gif' width="20" height="20" alt="Klasse loeschen"></button>
+ </form>
+END
+;
+ }
+ }
+ print "\t</table>\n";
+ &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{'MINBDWTH'} >= 0 ) && ( $qossettings{'MINBDWTH'} <= $qossettings{'SPD'} ) ) {
+ $qossettings{'VALID'} = 'no';
+ $message = "Mindestbandbreite ist ungueltig.";
+ }
+ $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 = "Mamimalbandbreite ist ungueltig.";
+ }
+ $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 = "Die Klassennummer passt nicht zum angegebenen Interface.";
+ }
+ } 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 = <FILE>;
+ close FILE;
+ foreach $classentry (sort @tmp)
+ {
+ @tmpline = split( /\;/, $classentry );
+ if ( $tmpline[1] eq $qossettings{'CLASS'} )
+ {
+ $qossettings{'VALID'} = 'no';
+ $message = "Die aktuelle Klasse wird bereits verwendet.";
+ last
+ }
+ }
+ }
+}
+sub validsubclass {
+ if ( $qossettings{'VALID'} eq 'yes' ) {
+ open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
+ @tmp = <FILE>;
+ close FILE;
+ foreach $subclassentry (sort @tmp)
+ {
+ @tmpline = split( /\;/, $subclassentry );
+ if ( $tmpline[2] eq $qossettings{'SCLASS'} )
+ {
+ $qossettings{'VALID'} = 'no';
+ $message = "Die aktuelle Klasse wird bereits verwendet.";
+ last
+ }
+ }
+ }