]>
git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - html/cgi-bin/qos.cgi
5 # This code is distributed under the terms of the GPL
12 # enable only the following on debugging purpose
14 use CGI
:: Carp
'fatalsToBrowser' ;
16 require '/var/ipfire/general-functions.pl' ;
17 require "${General::swroot}/lang.pl" ;
18 require "${General::swroot}/header.pl" ;
24 my $errormessage = "" ;
28 my $subclassentry = "" ;
30 my $portruleentry = "" ;
38 my @subclassline = ();
40 my @portruleline = ();
43 my $classfile = "/var/ipfire/qos/classes" ;
44 my $subclassfile = "/var/ipfire/qos/subclasses" ;
45 my $level7file = "/var/ipfire/qos/level7config" ;
46 my $portfile = "/var/ipfire/qos/portconfig" ;
47 & General
:: readhash
( "${General::swroot}/ethernet/settings" , \
%netsettings );
49 & Header
:: showhttpheaders
();
51 $qossettings { 'ENABLED' } = 'off' ;
52 $qossettings { 'EDIT' } = 'no' ;
53 $qossettings { 'OUT_SPD' } = '' ;
54 $qossettings { 'INC_SPD' } = '' ;
55 $qossettings { 'DEF_OUT_SPD' } = '' ;
56 $qossettings { 'DEF_INC_SPD' } = '' ;
57 $qossettings { 'DEFCLASS_INC' } = '' ;
58 $qossettings { 'DEFCLASS_OUT' } = '' ;
59 $qossettings { 'ACK' } = '' ;
60 $qossettings { 'MTU' } = '1492' ;
61 $qossettings { 'SFQ_PERTUB' } = '10' ;
62 $qossettings { 'QLENGTH' } = '30' ;
63 $qossettings { 'RED_DEV' } = `cat /var/ipfire/red/iface` ;
64 $qossettings { 'IMQ_DEV' } = 'imq0' ;
65 $qossettings { 'VALID' } = 'yes' ;
66 ### Values that have to be initialized
67 $qossettings { 'ACTION' } = '' ;
68 $qossettings { 'ACTIONDEF' } = '' ;
69 $qossettings { 'ACTIONBW' } = '' ;
70 $qossettings { 'PRIO' } = '' ;
71 $qossettings { 'SPD' } = '' ;
72 $qossettings { 'CLASS' } = '' ;
73 $qossettings { 'SCLASS' } = '' ;
74 $qossettings { 'QPORT' } = '' ;
75 $qossettings { 'DPORT' } = '' ;
76 $qossettings { 'QIP' } = '' ;
77 $qossettings { 'DIP' } = '' ;
78 $qossettings { 'PPROT' } = '' ;
79 $qossettings { 'L7PROT' } = '' ;
80 $qossettings { 'DEVICE' } = '' ;
81 $qossettings { 'MINBWDTH' } = '' ;
82 $qossettings { 'MAXBWDTH' } = '' ;
83 $qossettings { 'BURST' } = '' ;
84 $qossettings { 'CBURST' } = '' ;
85 $qossettings { 'DOCLASS' } = '' ;
86 $qossettings { 'DOSCLASS' } = '' ;
87 $qossettings { 'DOLEVEL7' } = '' ;
88 $qossettings { 'DOPORT' } = '' ;
89 $qossettings { 'CLASS' } = '' ;
90 $qossettings { 'CLASSPRFX' } = '' ;
91 $qossettings { 'DEV' } = '' ;
94 & General
:: readhash
( "${General::swroot}/qos/settings" , \
%qossettings );
95 & Header
:: getcgihash
( \
%qossettings );
97 & Header
:: openpage
( 'QoS' , 1 , '' );
98 & Header
:: openbigbox
( '100%' , 'left' , '' , $errormessage );
100 ############################################################################################################################
101 ############################################################################################################################
103 if ( $qossettings { 'DOCLASS' } eq $Lang :: tr
{ 'save' })
108 if ( $qossettings { 'VALID' } eq 'yes' ) {
109 open ( FILE
, ">> $classfile " ) or die "Unable to write $classfile " ;
111 $qossettings {'DEVICE'}; $qossettings {'CLASS'}; $qossettings {'PRIO'}; $qossettings {'MINBWDTH'}; $qossettings {'MAXBWDTH'}; $qossettings {'BURST'}; $qossettings {'CBURST'};
116 $qossettings { 'ACTION' } = 'Parentklasse hinzufuegen' ;
119 elsif ( $qossettings { 'DOCLASS' } eq 'Bearbeiten' )
121 open ( FILE
, "< $classfile " ) or die "Unable to read $classfile " ;
124 open ( FILE
, "> $classfile " ) or die "Unable to write $classfile " ;
125 foreach $classentry ( sort @classes )
127 @classline = split ( /\;/ , $classentry );
128 if ( $classline [ 1 ] ne $qossettings { 'CLASS' } ) {
129 print FILE
$classentry ;
131 $qossettings { 'DEVICE' } = $classline [ 0 ];
132 $qossettings { 'PRIO' } = $classline [ 2 ];
133 $qossettings { 'MINBWDTH' } = $classline [ 3 ];
134 $qossettings { 'MAXBWDTH' } = $classline [ 4 ];
135 $qossettings { 'BURST' } = $classline [ 5 ];
136 $qossettings { 'CBURST' } = $classline [ 6 ];
137 $qossettings { 'EDIT' } = 'yes' ;
142 & Header
:: closebigbox
();
143 & Header
:: closepage
();
146 elsif ( $qossettings { 'DOCLASS' } eq 'Loeschen' )
148 open ( FILE
, "< $classfile " ) or die "Unable to read $classfile " ;
151 open ( FILE
, "> $classfile " ) or die "Unable to write $classfile " ;
152 foreach $classentry ( sort @tmp )
154 @tmpline = split ( /\;/ , $classentry );
155 if ( $tmpline [ 1 ] ne $qossettings { 'CLASS' } )
157 print FILE
$classentry ;
161 open ( FILE
, "< $subclassfile " ) or die "Unable to read $classfile " ;
164 open ( FILE
, "> $subclassfile " ) or die "Unable to write $classfile " ;
165 foreach $subclassentry ( sort @tmp )
167 @tmpline = split ( /\;/ , $subclassentry );
168 if ( $tmpline [ 1 ] ne $qossettings { 'CLASS' } )
170 print FILE
$subclassentry ;
174 $message = "Klasse $qossettings {'CLASS'} wurde mit eventuell vorhandenen Unterklassen geloescht." ;
177 ############################################################################################################################
178 ############################################################################################################################
180 if ( $qossettings { 'DOSCLASS' } eq $Lang :: tr
{ 'save' })
184 if ( $qossettings { 'VALID' } eq 'yes' ) {
185 open ( FILE
, ">> $subclassfile " ) or die "Unable to write $subclassfile " ;
187 $qossettings {'DEVICE'}; $qossettings {'CLASS'}; $qossettings {'SCLASS'}; $qossettings {'PRIO'}; $qossettings {'MINBWDTH'}; $qossettings {'MAXBWDTH'}; $qossettings {'BURST'}; $qossettings {'CBURST'};
192 $qossettings { 'ACTION' } = 'Unterklasse hinzufuegen' ;
194 } elsif ( $qossettings { 'DOSCLASS' } eq 'Loeschen' )
196 open ( FILE
, "< $subclassfile " ) or die "Unable to read $classfile " ;
199 open ( FILE
, "> $subclassfile " ) or die "Unable to write $classfile " ;
200 foreach $subclassentry ( sort @tmp )
202 @tmpline = split ( /\;/ , $subclassentry );
203 if ( $tmpline [ 2 ] ne $qossettings { 'CLASS' } )
205 print FILE
$subclassentry ;
209 $message = "Unterklasse $qossettings {'CLASS'} wurde geloescht." ;
212 ############################################################################################################################
213 ############################################################################################################################
215 if ( $qossettings { 'DOLEVEL7' } eq $Lang :: tr
{ 'save' })
217 if ( $qossettings { 'QIP' } ne '' ) {
218 unless ( & General
:: validip
( $qossettings { 'QIP' }) ) {
219 $qossettings { 'VALID' } = 'no' ;
220 $message = "Die Quell-IP-Adresse ist ungueltig." ;
223 if ( $qossettings { 'DIP' } ne '' ) {
224 unless ( & General
:: validip
( $qossettings { 'DIP' }) ) {
225 $qossettings { 'VALID' } = 'no' ;
226 $message = "Die Ziel-IP-Adresse ist ungueltig." ;
229 if ( $qossettings { 'CLASS' } >= 100 && $qossettings { 'CLASS' } < 121 ) {
230 $qossettings { 'DEVICE' } = $qossettings { 'RED_DEV' };
231 } elsif ( $qossettings { 'CLASS' } >= 1000 && $qossettings { 'CLASS' } < 1021 ) {
232 $qossettings { 'DEVICE' } = $qossettings { 'RED_DEV' };
233 } elsif ( $qossettings { 'CLASS' } >= 200 && $qossettings { 'CLASS' } < 221 ) {
234 $qossettings { 'DEVICE' } = $qossettings { 'IMQ_DEV' };
235 } elsif ( $qossettings { 'CLASS' } >= 2000 && $qossettings { 'CLASS' } < 2021 ) {
236 $qossettings { 'DEVICE' } = $qossettings { 'IMQ_DEV' };
238 if ( $qossettings { 'VALID' } eq 'yes' ) {
239 open ( FILE
, ">> $level7file " ) or die "Unable to write $level7file " ;
241 $qossettings {'CLASS'}; $qossettings {'DEVICE'}; $qossettings {'L7PROT'}; $qossettings {'QIP'}; $qossettings {'DIP'};
246 $qossettings { 'ACTION' } = 'Level7-Regel hinzufuegen' ;
249 elsif ( $qossettings { 'DOLEVEL7' } eq 'Loeschen' )
251 open ( FILE
, "< $level7file " ) or die "Unable to read $level7file " ;
254 open ( FILE
, "> $level7file " ) or die "Unable to read $level7file " ;
255 foreach $l7ruleentry ( sort @l7rules )
257 @l7ruleline = split ( /\;/ , $l7ruleentry );
258 if ( ( $l7ruleline [ 0 ] ne $qossettings { 'CLASS' }) && ( $l7ruleline [ 2 ] ne $qossettings { 'L7PROT' }))
260 print FILE
$l7ruleentry ;
264 $message = "Level7-Regel ( $qossettings {'CLASS'} - $qossettings {'L7PROT'}) wurde geloescht." ;
267 ############################################################################################################################
268 ############################################################################################################################
270 if ( $qossettings { 'DOPORT' } eq $Lang :: tr
{ 'save' })
272 if ( $qossettings { 'QIP' } ne '' ) {
273 unless ( & General
:: validip
( $qossettings { 'QIP' }) ) {
274 $qossettings { 'VALID' } = 'no' ;
275 $message = "Die Quell-IP-Adresse ist ungueltig." ;
278 if ( $qossettings { 'DIP' } ne '' ) {
279 unless ( & General
:: validip
( $qossettings { 'DIP' }) ) {
280 $qossettings { 'VALID' } = 'no' ;
281 $message = "Die Ziel-IP-Adresse ist ungueltig." ;
284 if ( $qossettings { 'CLASS' } >= 100 && $qossettings { 'CLASS' } < 121 ) {
285 $qossettings { 'DEVICE' } = $qossettings { 'RED_DEV' };
286 } elsif ( $qossettings { 'CLASS' } >= 1000 && $qossettings { 'CLASS' } < 1021 ) {
287 $qossettings { 'DEVICE' } = $qossettings { 'RED_DEV' };
288 } elsif ( $qossettings { 'CLASS' } >= 200 && $qossettings { 'CLASS' } < 221 ) {
289 $qossettings { 'DEVICE' } = $qossettings { 'IMQ_DEV' };
290 } elsif ( $qossettings { 'CLASS' } >= 2000 && $qossettings { 'CLASS' } < 2021 ) {
291 $qossettings { 'DEVICE' } = $qossettings { 'IMQ_DEV' };
293 if ( $qossettings { 'VALID' } eq 'yes' ) {
294 open ( FILE
, ">> $portfile " ) or die "Unable to write $portfile " ;
296 $qossettings {'CLASS'}; $qossettings {'DEVICE'}; $qossettings {'PPROT'}; $qossettings {'QIP'}; $qossettings {'QPORT'}; $qossettings {'DIP'}; $qossettings {'DPORT'};
301 $qossettings { 'ACTION' } = 'Port-Regel hinzufuegen' ;
303 } elsif ( $qossettings { 'DOPORT' } eq 'Loeschen' )
305 open ( FILE
, "< $portfile " ) or die "Unable to read $portfile " ;
308 open ( FILE
, "> $portfile " ) or die "Unable to read $portfile " ;
309 foreach $portruleentry ( sort @portrules )
311 @portruleline = split ( /\;/ , $portruleentry );
312 unless ( ( $portruleline [ 0 ] eq $qossettings { 'CLASS' }) && ( $portruleline [ 2 ] eq $qossettings { 'PPROT' }) && ( $portruleline [ 3 ] eq $qossettings { 'QIP' }) && ( $portruleline [ 4 ] eq $qossettings { 'QPORT' }) && ( $portruleline [ 5 ] eq $qossettings { 'DIP' }) && ( $portruleline [ 6 ] eq $qossettings { 'DPORT' }))
314 print FILE
$portruleentry ;
318 $message = "Port-Regel ( $qossettings {'CLASS'} - $qossettings {'PPROT'}) wurde geloescht." ;
321 ############################################################################################################################
322 ############################################################################################################################
324 if ( $qossettings { 'ACTION' } eq 'Start' )
326 system ( "/usr/local/bin/qosctrl generate >/dev/null 2>&1" );
327 system ( "/bin/touch /var/ipfire/qos/enable" );
328 system ( "/usr/local/bin/qosctrl start >/dev/null 2>&1" );
329 system ( "logger -t ipfire 'QoS started'" );
330 $qossettings { 'ENABLED' } = 'on' ;
331 & General
:: writehash
( "${General::swroot}/qos/settings" , \
%qossettings );
333 elsif ( $qossettings { 'ACTION' } eq 'Stop' )
335 system ( "/usr/local/bin/qosctrl stop >/dev/null 2>&1" );
336 unlink "/var/ipfire/qos/bin/qos.sh" ;
337 unlink "/var/ipfire/qos/enable" ;
338 system ( "logger -t ipfire 'QoS stopped'" );
339 $qossettings { 'ENABLED' } = 'off' ;
340 & General
:: writehash
( "${General::swroot}/qos/settings" , \
%qossettings );
342 elsif ( $qossettings { 'ACTION' } eq 'Neustart' )
344 if ( $qossettings { 'ENABLED' } eq 'on' ){
345 system ( "/usr/local/bin/qosctrl stop >/dev/null 2>&1" );
346 system ( "/usr/local/bin/qosctrl generate >/dev/null 2>&1" );
347 system ( "/usr/local/bin/qosctrl start >/dev/null 2>&1" );
348 system ( "logger -t ipfire 'QoS restarted'" );
351 elsif ( $qossettings { 'ACTION' } eq $Lang :: tr
{ 'save' })
353 if ( $qossettings { 'DEF_INC_SPD' } eq '' ) {
354 $qossettings { 'DEF_INC_SPD' } = int ( $qossettings { 'INC_SPD' } * 0.9 );
356 if ( $qossettings { 'DEF_OUT_SPD' } eq '' ) {
357 $qossettings { 'DEF_OUT_SPD' } = int ( $qossettings { 'OUT_SPD' } * 0.9 );
359 & General
:: writehash
( "${General::swroot}/qos/settings" , \
%qossettings );
361 elsif ( $qossettings { 'ACTION' } eq 'Statusinformationen' )
363 & Header
:: openbox
( '100%' , 'left' , 'QoS Status' );
364 if ( $qossettings { 'ENABLED' } eq 'on' ){
366 $output = `/usr/local/bin/qosctrl status` ;
367 $output = & Header
:: cleanhtml
( $output , "y" );
368 print "<pre> $output </pre> \n " ;
369 } else { print "QoS ist nicht aktiviert!" ; }
371 & Header
:: closebigbox
();
372 & Header
:: closepage
();
375 elsif ( $qossettings { 'ACTION' } eq 'Grafische Auswertung' )
377 & Header
:: openbox
( '100%' , 'left' , 'QoS Graphen' );
379 <table width='100%'><tr><td colspan='2' align='center'><font color='red'>Diese Seite braucht je nach Geschwindigkeit des Computers laenger zum Laden.</font>
384 open ( FILE
, "< $classfile " ) or die "Unable to read $classfile " ;
387 open ( FILE
, "< $subclassfile " ) or die "Unable to read $subclassfile " ;
388 @subclasses = < FILE
>;
390 foreach $classentry ( sort @classes )
392 @classline = split ( /\;/ , $classentry );
393 $qossettings { 'DEV' }= $classline [ 0 ];
394 $qossettings { 'CLASS' }= $classline [ 1 ];
395 & gengraph
( $qossettings { 'DEV' }, $qossettings { 'CLASS' });
396 & Header
:: openbox
( '100%' , 'center' , " $qossettings {'CLASS'} ( $qossettings {'DEV'})" );
399 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-packets.png'>
400 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-borrowed.png'>
401 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-bytes.png'>
404 foreach $subclassentry ( sort @subclasses )
406 @subclassline = split ( /\;/ , $subclassentry );
407 if ( $subclassline [ 1 ] eq $classline [ 1 ]) {
408 $qossettings { 'DEV' }= $subclassline [ 0 ];
409 $qossettings { 'SCLASS' }= $subclassline [ 2 ];
410 & gengraph
( $qossettings { 'DEV' }, $qossettings { 'SCLASS' });
412 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'SCLASS'}_ $qossettings {'DEV'}-packets.png'>
413 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'SCLASS'}_ $qossettings {'DEV'}-borrowed.png'>
414 <tr><td colspan='2' align='center'><img src='/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'SCLASS'}_ $qossettings {'DEV'}-bytes.png'>
419 print " \t\t </table>" ;
427 & Header
:: closebigbox
();
428 & Header
:: closepage
();
431 elsif ( $qossettings { 'ACTION' } eq 'Parentklasse hinzufuegen' )
434 & Header
:: closebigbox
();
435 & Header
:: closepage
();
438 elsif ( $qossettings { 'ACTION' } eq 'Unterklasse hinzufuegen' )
441 & Header
:: closebigbox
();
442 & Header
:: closepage
();
445 elsif ( $qossettings { 'ACTION' } eq 'Level7-Regel hinzufuegen' )
448 & Header
:: closebigbox
();
449 & Header
:: closepage
();
452 elsif ( $qossettings { 'ACTION' } eq 'Port-Regel hinzufuegen' )
455 & Header
:: closebigbox
();
456 & Header
:: closepage
();
459 elsif ( $qossettings { 'ACTION' } eq 'Erweiterte Einstellungen' )
462 & Header
:: closebigbox
();
463 & Header
:: closepage
();
466 if ( $qossettings { 'ACTIONBW' } eq 'Andern' )
469 & Header
:: closebigbox
();
470 & Header
:: closepage
();
473 if ( $qossettings { 'ACTIONDEF' } eq 'Andern' )
476 & Header
:: closebigbox
();
477 & Header
:: closepage
();
481 & General
:: readhash
( "${General::swroot}/qos/settings" , \
%qossettings );
483 my $status = $Lang :: tr
{ 'stopped' };
484 my $statuscolor = '#993333' ;
485 if ( $qossettings { 'ENABLED' } eq 'on' ) {
486 $status = $Lang :: tr
{ 'running' };
487 $statuscolor = '#339933' ;
490 if ( $netsettings { 'RED_TYPE' } ne 'PPPOE' ) {
491 $qossettings { 'RED_DEV' } = $netsettings { 'RED_DEV' };
495 & Header
:: openbox
( '100%' , 'left' , $Lang :: tr
{ 'error messages' });
496 print "<class name='base'> $errormessage \n " ;
497 print " </class> \n " ;
501 ############################################################################################################################
502 ############################################################################################################################
504 & Header
:: openbox
( '100%' , 'center' , 'Quality of Service' );
506 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
510 if ( $message ne "" ) {
511 print "<tr><td colspan='2' align='center'><font color='red'> $message </font>" ;
514 <tr><td width='50%' align='left'><b>Quality of Service:</b>
515 <td width='50%' align='center' bgcolor=' $statuscolor '><font color='white'> $status </font>
516 <tr><td width='100%' align='center' colspan='2'>
517 <input type='submit' name='ACTION' value='Start' />
518 <input type='submit' name='ACTION' value='Stop' />
519 <input type='submit' name='ACTION' value=' $Lang ::tr{'restart'}' />
522 if (( $qossettings { 'OUT_SPD' } ne '' ) && ( $qossettings { 'INC_SPD' } ne '' )) {
524 <tr><td colspan='3'>
525 <tr><td width='40%' align='right'>Downloadgeschwindigkeit: <td width='40%' align='left'> $qossettings {'INC_SPD'} kbps
526 <td width='20%' rowspan='2' align='center' valign='middle'><input type='submit' name='ACTIONBW' value='Andern'>
527 <tr><td width='40%' align='right'>Uploadgeschwindigkeit: <td width='40%' align='left'> $qossettings {'OUT_SPD'} kbps
531 if (( $qossettings { 'DEFCLASS_OUT' } ne '' ) && ( $qossettings { 'DEFCLASS_INC' } ne '' )&& ( $qossettings { 'ACK' } ne '' )) {
533 <tr><td colspan='3'><hr>
534 <tr><td width='40%' align='right'>Downloadstandardklasse: <td width='40%' align='left'> $qossettings {'DEFCLASS_INC'}
535 <td width='20%' rowspan='3' align='center' valign='middle'><input type='submit' name='ACTIONDEF' value='Andern'>
536 <tr><td width='40%' align='right'>Uploadstandardklasse: <td width='40%' align='left'> $qossettings {'DEFCLASS_OUT'}
537 <tr><td width='40%' align='right'>ACKs: <td width='40%' align='left'> $qossettings {'ACK'}
538 <tr><td colspan='3' width='100%'><hr>
539 <tr><td colspan='3' width='100%' align='center'>
540 <table boder='0' cellpadding='0' cellspacing='0'>
541 <tr><td><input type='submit' name='ACTION' value='Parentklasse hinzufuegen'>
542 <td><input type='submit' name='ACTION' value='Erweiterte Einstellungen'>
543 <tr><td><input type='submit' name='ACTION' value='Statusinformationen'>
544 <td><input type='submit' name='ACTION' value='Grafische Auswertung'>
553 if ( ( $qossettings { 'OUT_SPD' } eq '' ) || ( $qossettings { 'INC_SPD' } eq '' ) ) {
556 & Header
:: closebigbox
();
557 & Header
:: closepage
();
561 if ( ( $qossettings { 'DEFCLASS_INC' } eq '' ) || ( $qossettings { 'DEFCLASS_OUT' } eq '' ) || ( $qossettings { 'ACK' } eq '' ) ) {
563 & Header
:: closebigbox
();
564 & Header
:: closepage
();
572 & Header
:: closebigbox
();
573 & Header
:: closepage
();
575 ############################################################################################################################
576 ############################################################################################################################
578 sub changedefclasses
{
579 & Header
:: openbox
( '100%' , 'center' , 'Standardklassen:' );
581 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
583 <tr><td width='100%' colspan='3'>Legen sie hier die Standardklassen fest durch die nicht-gefilterte Pakete gehen.
584 <tr><td width='33%' align='right'>Download:<td width='33%' align='left'><select name='DEFCLASS_INC'>
587 for ( $c = 200 ; $c <= 220 ; $c ++ )
589 if ( $qossettings { 'DEFCLASS_INC' } ne $c )
590 { print "<option value=' $c '> $c </option> \n " ; }
591 else { print "<option selected value=' $c '> $c </option> \n " ; }
594 </select><td width='33%' align='center'>
595 <tr><td width='33%' align='right'>Upload:<td width='33%' align='left'><select name='DEFCLASS_OUT'>
598 for ( $c = 100 ; $c <= 120 ; $c ++ )
600 if ( $qossettings { 'DEFCLASS_OUT' } ne $c )
601 { print "<option value=' $c '> $c </option> \n " ; }
602 else { print "<option selected value=' $c '> $c </option> \n " ; }
605 </select><td width='33%' align='center'>
609 <tr><td width='100%' colspan='3'>Legen sie hier die ACK-Klasse fest <br> und klicken Sie danach auf <i>Speichern</i>.
610 <tr><td width='33%' align='right'>ACKs:<td width='33%' align='left'><select name='ACK'>
613 for ( $c = 100 ; $c <= 120 ; $c ++ )
615 if ( $qossettings { 'ACK' } ne $c )
616 { print "<option value=' $c '> $c </option> \n " ; }
617 else { print "<option selected value=' $c '> $c </option> \n " ; }
620 </select><td width='33%' align='center'><input type='submit' name='ACTION' value= $Lang ::tr{'save'} />
628 sub changebandwidth
{
629 & Header
:: openbox
( '100%' , 'center' , 'Bandbreiteneinstellungen' );
630 if ( $qossettings { 'ENABLED' } eq 'on' ) {
631 print "Sie koennen die Bandbreiteneinstellungen nicht bearbeiten, wenn QoS eingeschaltet ist. Schalten sie es zuerst dazu aus.<p>" ;
632 print "<a href='/cgi-bin/qos.cgi'>Zurueck</a>" ;
635 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
636 <input type='hidden' name='DEF_OUT_SPD' value=''><input type='hidden' name='DEF_INC_SPD' value=''>
638 <tr><td width='100%' colspan='3'>Geben Sie bitte hier ihre Download- bzw. Upload-Geschwindigkeit ein <br> und klicken Sie danach auf <i>Speichern</i>.
639 <tr><td width='33%' align='right'>Download-Geschwindigkeit:
640 <td width='33%' align='left'><input type='text' name='INC_SPD' maxlength='8' value= $qossettings {'INC_SPD'}> kbps
641 <td width='33%' align='center'>
642 <tr><td width='33%' align='right'>Upload-Geschwindigkeit:
643 <td width='33%' align='left'><input type='text' name='OUT_SPD' maxlength='8' value= $qossettings {'OUT_SPD'}> kbps
644 <td width='33%' align='center'><input type='submit' name='ACTION' value= $Lang ::tr{'save'} /> <input type='reset' name='ACTION' value= $Lang ::tr{'reset'} />
654 & Header
:: openbox
( '100%' , 'center' , 'Parentklasse' );
656 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
660 if ( $message ne "" ) {
661 print "<tr><td colspan='3' align='center'> $message " ;
663 if ( $qossettings { 'EDIT' } eq 'yes' ) {
664 print "<input type='hidden' name='CLASS' value= $qossettings {'CLASS'}>" ;
665 print "<input type='hidden' name='DEVICE' value= $qossettings {'DEVICE'}>" ;
668 <tr><td width='100%' colspan='3'>Geben sie die Daten ein <br> und klicken Sie danach auf <i>Speichern</i>.
669 <tr><td width='33%' align='right'>Interface:
670 <td width='33%' align='left'>
673 if ( $qossettings { 'EDIT' } eq 'yes' ) {
674 print "<select name='DEVICE' disabled>" ;
676 print "<select name='DEVICE'>" ;
678 if ( $qossettings { 'DEVICE' } eq $qossettings { 'RED_DEV' } ) {
679 $qossettings { 'RED_DEV_SEL' } = 'selected' ;
680 } elsif ( $qossettings { 'DEVICE' } eq $qossettings { 'IMQ_DEV' } ) {
681 $qossettings { 'IMQ_DEV_SEL' } = 'selected' ;
684 <option value= $qossettings {'RED_DEV'} $qossettings {'RED_DEV_SEL'}> $qossettings {'RED_DEV'}</option>
685 <option value= $qossettings {'IMQ_DEV'} $qossettings {'IMQ_DEV_SEL'}> $qossettings {'IMQ_DEV'}</option></select>
686 <td width='33%' align='center'>
687 <tr><td width='33%' align='right'>Klasse:<td width='33%' align='left'>
690 if ( $qossettings { 'EDIT' } eq 'yes' ) {
691 print "<select name='CLASS' disabled>" ;
693 print "<select name='CLASS'>" ;
695 for ( $c = 100 ; $c <= 120 ; $c ++ )
697 if ( $qossettings { 'CLASS' } ne $c )
698 { print "<option value=' $c '> $c </option> \n " ; }
699 else { print "<option selected value=' $c '> $c </option> \n " ; }
701 for ( $c = 200 ; $c <= 220 ; $c ++ )
703 if ( $qossettings { 'CLASS' } ne $c )
704 { print "<option value=' $c '> $c </option> \n " ; }
705 else { print "<option selected value=' $c '> $c </option> \n " ; }
709 <td width='33%' align='center'>
710 <tr><td width='33%' align='right'>Prioritaet:<td width='33%' align='left'><select name='PRIO'>
713 for ( $c = 1 ; $c <= 7 ; $c ++ )
715 if ( $qossettings { 'PRIO' } ne $c )
716 { print "<option value=' $c '> $c </option> \n " ; }
717 else { print "<option selected value=' $c '> $c </option> \n " ; }
720 <td width='33%' align='center'>
721 <tr><td width='33%' align='right'>Garantierte Bandbreite:
722 <td width='33%' align='left'><input type='text' name='MINBWDTH' maxlength='8' required='1' value= $qossettings {'MINBWDTH'} >
723 <td width='33%' align='center'>
724 <tr><td width='33%' align='right'>Maximale Bandbreite:
725 <td width='33%' align='left'><input type='text' name='MAXBWDTH' maxlength='8' required='1' value= $qossettings {'MAXBWDTH'}>
726 <td width='33%' align='center'>
727 <tr><td width='33%' align='right'>Burst:
728 <td width='33%' align='left'><input type='text' name='BURST' maxlength='8' value= $qossettings {'BURST'}>
729 <td width='33%' align='center'>
730 <tr><td width='33%' align='right'>Ceilburst:
731 <td width='33%' align='left'><input type='text' name='CBURST' maxlength='8' value= $qossettings {'CBURST'}>
732 <td width='33%' align='center'><input type='submit' name='DOCLASS' value= $Lang ::tr{'save'} /> <input type='reset' value= $Lang ::tr{'reset'} />
740 & Header
:: openbox
( '100%' , 'center' , 'Unterklasse' );
742 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
746 if ( $message ne "" ) {
747 print "<tr><td colspan='3' align='center'> $message " ;
750 <tr><td colspan='3' width='100%'>Aktuelle Klasse: $qossettings {'CLASS'}
751 <tr><td width='100%' colspan='3'>Geben sie die Daten ein <br> und klicken Sie danach auf <i>Speichern</i>.
752 <tr><td width='33%' align='right'>Unterklasse:<td width='33%' align='left'><select name='SCLASS'>
755 if ( $qossettings { 'CLASS' } >= 100 && $qossettings { 'CLASS' } < 121 ) {
756 $qossettings { 'DEVICE' } = $qossettings { 'RED_DEV' };
757 for ( $c = 1000 ; $c <= 1020 ; $c ++ )
759 if ( $qossettings { 'SCLASS' } ne $c )
760 { print "<option value=' $c '> $c </option> \n " ; }
761 else { print "<option selected value=' $c '> $c </option> \n " ; }
763 } elsif ( $qossettings { 'CLASS' } >= 200 && $qossettings { 'CLASS' } < 221 ) {
764 $qossettings { 'DEVICE' } = $qossettings { 'IMQ_DEV' };
765 for ( $c = 2000 ; $c <= 2020 ; $c ++ )
767 if ( $qossettings { 'SCLASS' } ne $c )
768 { print "<option value=' $c '> $c </option> \n " ; }
769 else { print "<option selected value=' $c '> $c </option> \n " ; }
774 <td width='33%' align='center'>
775 <tr><td width='33%' align='right'>Prioritaet:<td width='33%' align='left'><select name='PRIO'>
778 for ( $c = 1 ; $c <= 7 ; $c ++ )
780 if ( $qossettings { 'PRIO' } ne $c )
781 { print "<option value=' $c '> $c </option> \n " ; }
782 else { print "<option selected value=' $c '> $c </option> \n " ; }
785 <td width='33%' align='center'>
786 <tr><td width='33%' align='right'>Garantierte Bandbreite:
787 <td width='33%' align='left'><input type='text' name='MINBWDTH' maxlength='8' required='1' value= $qossettings {'MINBWDTH'} >
788 <td width='33%' align='center'>
789 <tr><td width='33%' align='right'>Maximale Bandbreite:
790 <td width='33%' align='left'><input type='text' name='MAXBWDTH' maxlength='8' required='1' value= $qossettings {'MAXBWDTH'}>
791 <td width='33%' align='center'>
792 <tr><td width='33%' align='right'>Burst:
793 <td width='33%' align='left'><input type='text' name='BURST' maxlength='8' value= $qossettings {'BURST'}>
794 <td width='33%' align='center'>
795 <tr><td width='33%' align='right'>Ceilburst:
796 <td width='33%' align='left'><input type='text' name='CBURST' maxlength='8' value= $qossettings {'CBURST'}>
797 <td width='33%' align='center'><input type='hidden' name='CLASS' value= $qossettings {'CLASS'}>
798 <input type='hidden' name='DEVICE' value= $qossettings {'DEVICE'}>
799 <input type='submit' name='DOSCLASS' value= $Lang ::tr{'save'} /> <input type='reset' value= $Lang ::tr{'reset'} />
807 & Header
:: openbox
( '100%' , 'center' , 'Level7-Regel' );
809 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
813 if ( $message ne "" ) {
814 print "<tr><td colspan='3' align='center'><font color='red'> $message </font>" ;
817 <tr><td colspan='3' width='100%'>Aktuelle Klasse: $qossettings {'CLASS'}
818 <tr><td width='100%' colspan='3'>Geben sie die Daten ein <br> und klicken Sie danach auf <i>Speichern</i>.
819 <tr><td width='33%' align='right'>Protokoll:
820 <td width='33%' align='left'><select name='L7PROT'>
823 opendir ( DIR
, "/etc/l7-protocols/protocols" );
824 foreach $direntry ( sort readdir ( DIR
) )
826 next if $direntry eq "." ;
827 next if $direntry eq ".." ;
828 next if - d
"/etc/l7-protocols/protocols/ $direntry " ;
829 @proto = split ( /\./ , $direntry );
830 if ( $proto [ 0 ] eq $qossettings { 'L7PROT' } ) {
831 print "<option value=' $proto [0]' selected> $proto [0]</option> \n " ;
833 print "<option value=' $proto [0]'> $proto [0]</option> \n " ;
838 </select><td width='33%' align='center'>
839 <tr><td width='33%' align='right'>Quell-IP-Adresse:
840 <td width='33%' align='left'><input type='text' name='QIP' maxlength='15' value= $qossettings {'QIP'}>
841 <td width='33%' align='center'>
842 <tr><td width='33%' align='right'>Ziel-IP-Adresse:
843 <td width='33%' align='left'><input type='text' name='DIP' maxlength='15' value= $qossettings {'DIP'}>
844 <td width='33%' align='center'><input type='hidden' name='CLASS' value= $qossettings {'CLASS'}><input type='submit' name='DOLEVEL7' value= $Lang ::tr{'save'} />
852 & Header
:: openbox
( '100%' , 'center' , 'Port-Regel hinzufuegen' );
854 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
856 <tr><td width='100%' colspan='3'>Geben sie die Daten ein <br> und klicken Sie danach auf <i>Speichern</i>.
857 <tr><td width='33%' align='right'>Protokoll:
858 <td width='33%' align='left'><select name='PPROT'>
861 open ( FILE
, "< /etc/protocols" );
864 foreach $direntry ( sort @proto )
866 @tmpline = split ( /\ / , $direntry );
867 next if $tmpline [ 0 ] =~ "#" ;
868 if ( $tmpline [ 0 ] eq $qossettings { 'PPROT' } ) {
869 print "<option value=' $tmpline [0]' selected> $tmpline [0]</option> \n " ;
871 print "<option value=' $tmpline [0]'> $tmpline [0]</option> \n " ;
875 </select><td width='33%' align='center'>
876 <tr><td width='33%' align='right'>Quell-Port:
877 <td width='33%' align='left'><input type='text' name='QPORT' maxlength='5' value= $qossettings {'QPORT'}>
878 <td width='33%' align='center'>
879 <tr><td width='33%' align='right'>Ziel-Port:
880 <td width='33%' align='left'><input type='text' name='DPORT' maxlength='5' value= $qossettings {'DPORT'}>
881 <td width='33%' align='center'>
882 <tr><td width='33%' align='right'>Quell-IP-Adresse:
883 <td width='33%' align='left'><input type='text' name='QIP' maxlength='15' value= $qossettings {'QIP'}>
884 <td width='33%' align='center'>
885 <tr><td width='33%' align='right'>Ziel-IP-Adresse:
886 <td width='33%' align='left'><input type='text' name='DIP' maxlength='15' value= $qossettings {'DIP'}>
887 <td width='33%' align='center'><input type='hidden' name='CLASS' value=' $qossettings {'CLASS'}'><input type='submit' name='DOPORT' value= $Lang ::tr{'save'} />
895 open ( FILE
, "< $classfile " ) or die "Unable to read $classfile " ;
899 open ( FILE
, "< $subclassfile " ) or die "Unable to read $subclassfile " ;
900 @subclasses = < FILE
>;
902 & Header
:: openbox
( '100%' , 'center' , 'Klassen' );
904 <table border='0' width='100%' cellspacing='0'>
905 <tr><td bgcolor='lightgrey' width='10%'>Interface
906 <td bgcolor='lightgrey' width='10%'>Klasse
907 <td bgcolor='lightgrey' width='10%'>Prioritaet
908 <td bgcolor='lightgrey' width='10%'>Garantierte Bandbreite
909 <td bgcolor='lightgrey' width='10%'>Maximale Bandbreite
910 <td bgcolor='lightgrey' width='10%'>Burst
911 <td bgcolor='lightgrey' width='10%'>Ceil Burst
912 <td bgcolor='lightgrey' width='30%'>Aktionen
915 foreach $classentry ( sort @classes )
917 @classline = split ( /\;/ , $classentry );
918 if ( $classline [ 0 ] eq $qossettings { 'RED_DEV' } )
921 <tr><td align='center' bgcolor='#EAEAEA'> $classline [0]
922 <td align='center' bgcolor='#EAEAEA'> $classline [1]
923 <td align='center' bgcolor='#EAEAEA'> $classline [2]
924 <td align='center' bgcolor='#EAEAEA'> $classline [3]
925 <td align='center' bgcolor='#EAEAEA'> $classline [4]
926 <td align='center' bgcolor='#EAEAEA'> $classline [5]
927 <td align='center' bgcolor='#EAEAEA'> $classline [6]
928 <td align='right' bgcolor='#EAEAEA'>
929 <table border='0'><tr>
930 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
931 <input type='hidden' name='CLASS' value=' $classline [1]'>
932 <input type='hidden' name='DOCLASS' value='Bearbeiten'>
933 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
935 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
936 <input type='hidden' name='CLASS' value=' $classline [1]'>
937 <input type='hidden' name='ACTION' value='Unterklasse hinzufuegen'>
938 <input type='image' alt='Unterklasse hinzufuegen' src='/images/addblue.gif'>
940 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
941 <input type='hidden' name='CLASS' value=' $classline [1]'>
942 <input type='hidden' name='ACTION' value='Level7-Regel hinzufuegen'>
943 <input type='image' alt='Level7-Regel hinzufuegen' src='/images/addgreen.gif'>
945 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
946 <input type='hidden' name='CLASS' value=' $classline [1]'>
947 <input type='hidden' name='ACTION' value='Port-Regel hinzufuegen'>
948 <input type='image' alt='Port-Regel hinzufuegen' src='/images/add.gif'>
950 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
951 <input type='hidden' name='CLASS' value=' $classline [1]'>
952 <input type='hidden' name='DOCLASS' value='Loeschen'>
953 <input type='image' alt='Loeschen' src='/images/delete.gif'>
958 foreach $subclassentry ( sort @subclasses )
960 @subclassline = split ( /\;/ , $subclassentry );
961 if ( $subclassline [ 1 ] eq $classline [ 1 ] ) {
963 <tr><td align='center' bgcolor='#FFFFFF'>Subklasse:
964 <td align='center' bgcolor='#FAFAFA'> $subclassline [2]
965 <td align='center' bgcolor='#FAFAFA'> $subclassline [3]
966 <td align='center' bgcolor='#FAFAFA'> $subclassline [4]
967 <td align='center' bgcolor='#FAFAFA'> $subclassline [5]
968 <td align='center' bgcolor='#FAFAFA'> $subclassline [6]
969 <td align='center' bgcolor='#FAFAFA'> $subclassline [7]
970 <td align='right' bgcolor='#FAFAFA'>
971 <table border='0'><tr>
972 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
973 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
974 <input type='hidden' name='DOSCLASS' value='Bearbeiten'>
975 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
977 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
978 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
979 <input type='hidden' name='ACTION' value='Level7-Regel hinzufuegen'>
980 <input type='image' alt='Level7-Regel hinzufuegen' src='/images/addgreen.gif'>
982 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
983 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
984 <input type='hidden' name='ACTION' value='Port-Regel hinzufuegen'>
985 <input type='image' alt='Port-Regel hinzufuegen' src='/images/add.gif'>
987 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
988 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
989 <input type='hidden' name='DOSCLASS' value='Loeschen'>
990 <input type='image' alt='Loeschen' src='/images/delete.gif'>
999 print " \t <tr><td colspan='8' bgcolor='lightgrey' height='2'>" ;
1000 foreach $classentry ( sort @classes )
1002 @classline = split ( /\;/ , $classentry );
1003 if ( $classline [ 0 ] eq $qossettings { 'IMQ_DEV' } )
1006 <tr><td align='center' bgcolor='#EAEAEA'> $classline [0]
1007 <td align='center' bgcolor='#EAEAEA'> $classline [1]
1008 <td align='center' bgcolor='#EAEAEA'> $classline [2]
1009 <td align='center' bgcolor='#EAEAEA'> $classline [3]
1010 <td align='center' bgcolor='#EAEAEA'> $classline [4]
1011 <td align='center' bgcolor='#EAEAEA'> $classline [5]
1012 <td align='center' bgcolor='#EAEAEA'> $classline [6]
1013 <td align='right' bgcolor='#EAEAEA'>
1014 <table border='0'><tr>
1015 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1016 <input type='hidden' name='CLASS' value=' $classline [1]'>
1017 <input type='hidden' name='DOCLASS' value='Bearbeiten'>
1018 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1020 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1021 <input type='hidden' name='CLASS' value=' $classline [1]'>
1022 <input type='hidden' name='ACTION' value='Unterklasse hinzufuegen'>
1023 <input type='image' alt='Unterklasse hinzufuegen' src='/images/addblue.gif'>
1025 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1026 <input type='hidden' name='CLASS' value=' $classline [1]'>
1027 <input type='hidden' name='ACTION' value='Level7-Regel hinzufuegen'>
1028 <input type='image' alt='Level7-Regel hinzufuegen' src='/images/addgreen.gif'>
1030 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1031 <input type='hidden' name='CLASS' value=' $classline [1]'>
1032 <input type='hidden' name='ACTION' value='Port-Regel hinzufuegen'>
1033 <input type='image' alt='Port-Regel hinzufuegen' src='/images/add.gif'>
1035 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1036 <input type='hidden' name='CLASS' value=' $classline [1]'>
1037 <input type='hidden' name='DOCLASS' value='Loeschen'>
1038 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1043 foreach $subclassentry ( sort @subclasses )
1045 @subclassline = split ( /\;/ , $subclassentry );
1046 if ( $subclassline [ 1 ] eq $classline [ 1 ] ) {
1048 <tr><td align='center' bgcolor='#FFFFFF'>Subklasse:
1049 <td align='center' bgcolor='#FAFAFA'> $subclassline [2]
1050 <td align='center' bgcolor='#FAFAFA'> $subclassline [3]
1051 <td align='center' bgcolor='#FAFAFA'> $subclassline [4]
1052 <td align='center' bgcolor='#FAFAFA'> $subclassline [5]
1053 <td align='center' bgcolor='#FAFAFA'> $subclassline [6]
1054 <td align='center' bgcolor='#FAFAFA'> $subclassline [7]
1055 <td align='right' bgcolor='#FAFAFA'>
1056 <table border='0'><tr>
1057 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1058 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
1059 <input type='hidden' name='DOSCLASS' value='Bearbeiten'>
1060 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1062 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1063 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
1064 <input type='hidden' name='ACTION' value='Level7-Regel hinzufuegen'>
1065 <input type='image' alt='Level7-Regel hinzufuegen' src='/images/addgreen.gif'>
1067 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1068 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
1069 <input type='hidden' name='ACTION' value='Port-Regel hinzufuegen'>
1070 <input type='image' alt='Port-Regel hinzufuegen' src='/images/add.gif'>
1072 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1073 <input type='hidden' name='CLASS' value=' $subclassline [2]'>
1074 <input type='hidden' name='DOSCLASS' value='Loeschen'>
1075 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1085 <tr><td colspan='8' align='right' valign='middle'><b>Legende:</b> <img src='/images/edit.gif'> Klasse bearbeiten | <img src='/images/addblue.gif'> Unterklasse hinzufuegen | <img src='/images/addgreen.gif'> Level7-Regel hinzufuegen | <img src='/images/add.gif'> Port-Regel hinzufuegen | <img src='/images/delete.gif'> Klasse loeschen
1089 & Header
:: closebox
();
1094 open ( FILE
, "< $level7file " ) or die "Unable to read $level7file " ;
1098 & Header
:: openbox
( '100%' , 'center' , 'Level7-Regeln' );
1100 <table border='0' width='100%' cellspacing='0'>
1101 <tr><td bgcolor='lightgrey' width='14%'>Interface
1102 <td bgcolor='lightgrey' width='14%'>Klasse
1103 <td bgcolor='lightgrey' width='14%'>Protokoll
1104 <td bgcolor='lightgrey' width='14%'>Quell-IP-Adresse
1105 <td bgcolor='lightgrey' width='14%'>Ziel-IP-Adresse
1106 <td bgcolor='lightgrey' width='30%'>Aktionen
1109 foreach $l7ruleentry ( sort @l7rules )
1111 @l7ruleline = split ( /\;/ , $l7ruleentry );
1112 if ( $l7ruleline [ 1 ] eq $qossettings { 'RED_DEV' } )
1115 <tr><td align='center' bgcolor='#EAEAEA'> $l7ruleline [1]
1116 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [0]
1117 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [2]
1118 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [3]
1119 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [4]
1120 <td align='right' bgcolor='#EAEAEA'>
1121 <table border='0'><tr>
1122 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1123 <input type='hidden' name='CLASS' value=' $l7ruleline [0]'>
1124 <input type='hidden' name='L7PROT' value=' $l7ruleline [2]'>
1125 <input type='hidden' name='DOLEVEL7' value='Bearbeiten'>
1126 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1128 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1129 <input type='hidden' name='CLASS' value=' $l7ruleline [0]'>
1130 <input type='hidden' name='L7PROT' value=' $l7ruleline [2]'>
1131 <input type='hidden' name='DOLEVEL7' value='Loeschen'>
1132 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1139 print " \t <tr><td colspan='8' bgcolor='lightgrey' height='2'>" ;
1140 foreach $l7ruleentry ( sort @l7rules )
1142 @l7ruleline = split ( /\;/ , $l7ruleentry );
1143 if ( $l7ruleline [ 1 ] eq $qossettings { 'IMQ_DEV' } )
1146 <tr><td align='center' bgcolor='#EAEAEA'> $l7ruleline [1]
1147 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [0]
1148 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [2]
1149 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [3]
1150 <td align='center' bgcolor='#EAEAEA'> $l7ruleline [4]
1151 <td align='right' bgcolor='#EAEAEA'>
1152 <table border='0'><tr>
1153 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1154 <input type='hidden' name='CLASS' value=' $l7ruleline [0]'>
1155 <input type='hidden' name='L7PROT' value=' $l7ruleline [2]'>
1156 <input type='hidden' name='DOLEVEL7' value='Bearbeiten'>
1157 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1159 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1160 <input type='hidden' name='CLASS' value=' $l7ruleline [0]'>
1161 <input type='hidden' name='L7PROT' value=' $l7ruleline [2]'>
1162 <input type='hidden' name='DOLEVEL7' value='Loeschen'>
1163 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1171 <tr><td colspan='8' align='right' valign='middle'><b>Legende:</b> <img src='/images/edit.gif'> Regel bearbeiten | <img src='/images/delete.gif'> Regel loeschen
1175 & Header
:: closebox
();
1180 open ( FILE
, "< $portfile " ) or die "Unable to read $portfile " ;
1181 @portrules = < FILE
>;
1184 & Header
:: openbox
( '100%' , 'center' , 'Port-Regeln' );
1186 <table border='0' width='100%' cellspacing='0'>
1187 <tr><td bgcolor='lightgrey' width='10%'>Interface
1188 <td bgcolor='lightgrey' width='10%'>Klasse
1189 <td bgcolor='lightgrey' width='10%'>Protokoll
1190 <td bgcolor='lightgrey' width='10%'>Quell-IP-Adresse
1191 <td bgcolor='lightgrey' width='10%'>Quell-Port
1192 <td bgcolor='lightgrey' width='10%'>Ziel-IP-Adresse
1193 <td bgcolor='lightgrey' width='10%'>Ziel-Port
1194 <td bgcolor='lightgrey' width='30%'>Aktionen
1197 foreach $portruleentry ( sort @portrules )
1199 @portruleline = split ( /\;/ , $portruleentry );
1200 if ( $portruleline [ 1 ] eq $qossettings { 'RED_DEV' } )
1203 <tr><td align='center' bgcolor='#EAEAEA'> $portruleline [1]
1204 <td align='center' bgcolor='#EAEAEA'> $portruleline [0]
1205 <td align='center' bgcolor='#EAEAEA'> $portruleline [2]
1206 <td align='center' bgcolor='#EAEAEA'> $portruleline [3]
1207 <td align='center' bgcolor='#EAEAEA'> $portruleline [4]
1208 <td align='center' bgcolor='#EAEAEA'> $portruleline [5]
1209 <td align='center' bgcolor='#EAEAEA'> $portruleline [6]
1210 <td align='right' bgcolor='#EAEAEA'>
1211 <table border='0'><tr>
1212 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1213 <input type='hidden' name='CLASS' value=' $portruleline [0]'>
1214 <input type='hidden' name='PPROT' value=' $portruleline [2]'>
1215 <input type='hidden' name='QIP' value=' $portruleline [3]'>
1216 <input type='hidden' name='QPORT' value=' $portruleline [4]'>
1217 <input type='hidden' name='DIP' value=' $portruleline [5]'>
1218 <input type='hidden' name='DPORT' value=' $portruleline [6]'>
1219 <input type='hidden' name='DOPORT' value='Bearbeiten'>
1220 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1222 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1223 <input type='hidden' name='CLASS' value=' $portruleline [0]'>
1224 <input type='hidden' name='PPROT' value=' $portruleline [2]'>
1225 <input type='hidden' name='QIP' value=' $portruleline [3]'>
1226 <input type='hidden' name='QPORT' value=' $portruleline [4]'>
1227 <input type='hidden' name='DIP' value=' $portruleline [5]'>
1228 <input type='hidden' name='DPORT' value=' $portruleline [6]'>
1229 <input type='hidden' name='DOPORT' value='Loeschen'>
1230 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1237 print " \t <tr><td colspan='8' bgcolor='lightgrey' height='2'>" ;
1238 foreach $portruleentry ( sort @portrules )
1240 @portruleline = split ( /\;/ , $portruleentry );
1241 if ( $portruleline [ 1 ] eq $qossettings { 'IMQ_DEV' } )
1244 <tr><td align='center' bgcolor='#EAEAEA'> $portruleline [1]
1245 <td align='center' bgcolor='#EAEAEA'> $portruleline [0]
1246 <td align='center' bgcolor='#EAEAEA'> $portruleline [2]
1247 <td align='center' bgcolor='#EAEAEA'> $portruleline [3]
1248 <td align='center' bgcolor='#EAEAEA'> $portruleline [4]
1249 <td align='center' bgcolor='#EAEAEA'> $portruleline [5]
1250 <td align='center' bgcolor='#EAEAEA'> $portruleline [6]
1251 <td align='right' bgcolor='#EAEAEA'>
1252 <table border='0'><tr>
1253 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1254 <input type='hidden' name='CLASS' value=' $portruleline [0]'>
1255 <input type='hidden' name='PPROT' value=' $portruleline [2]'>
1256 <input type='hidden' name='QIP' value=' $portruleline [3]'>
1257 <input type='hidden' name='QPORT' value=' $portruleline [4]'>
1258 <input type='hidden' name='DIP' value=' $portruleline [5]'>
1259 <input type='hidden' name='DPORT' value=' $portruleline [6]'>
1260 <input type='hidden' name='DOPORT' value='Bearbeiten'>
1261 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
1263 <td><form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1264 <input type='hidden' name='CLASS' value=' $portruleline [0]'>
1265 <input type='hidden' name='PPROT' value=' $portruleline [2]'>
1266 <input type='hidden' name='QIP' value=' $portruleline [3]'>
1267 <input type='hidden' name='QPORT' value=' $portruleline [4]'>
1268 <input type='hidden' name='DIP' value=' $portruleline [5]'>
1269 <input type='hidden' name='DPORT' value=' $portruleline [6]'>
1270 <input type='hidden' name='DOPORT' value='Loeschen'>
1271 <input type='image' alt='Loeschen' src='/images/delete.gif'>
1279 <tr><td colspan='8' align='right' valign='middle'><b>Legende:</b> <img src='/images/edit.gif'> Regel bearbeiten | <img src='/images/delete.gif'> Regel loeschen
1283 & Header
:: closebox
();
1289 & Header
:: openbox
( '100%' , 'center' , 'Expertenoptionen:' );
1291 <form method='post' action=' $ENV {'SCRIPT_NAME'}'>
1292 <!-- <table width='66%'>
1293 <tr><td width='100%' colspan='3'>Diese Einstellungen sollten sie nur veraendern, wenn sie wirklich wissen, was sie tun.
1294 <tr><td width='33%' align='right'>Download-Rate 90\%:<td width='33%' align='left'>
1295 <input type='text' name='DEF_INC_SPD' maxlength='8' required='4' value= $qossettings {'DEF_INC_SPD'}>
1296 <td width='33%' align='center'>
1297 <tr><td width='33%' align='right'>Upload-Rate 90\%:<td width='33%' align='left'>
1298 <input type='text' name='DEF_OUT_SPD' maxlength='8' required='4' value= $qossettings {'DEF_OUT_SPD'}>
1299 <td width='33%' align='center'>
1303 <tr><td width='33%' align='right'>MTU:<td width='33%' align='left'>
1304 <input type='text' name='MTU' maxlength='8' required='4' value= $qossettings {'MTU'}>
1305 <td width='33%' align='center'>Diese Einstellung aendert die MTU nicht global sondern nur fuer das QoS.
1306 <tr><td width='33%' align='right'>Queue Laenge:<td width='33%' align='left'>
1307 <input type='text' name='QLENGTH' maxlength='8' required='2' value= $qossettings {'QLENGTH'}>
1308 <td width='33%' align='center'>
1309 <tr><td width='33%' align='right'>SFQ Perturb:<td width='33%' align='left'>
1310 <input type='text' name='SFQ_PERTUB' maxlength='8' required='1' value= $qossettings {'SFQ_PERTUB'}>
1311 <td width='33%' align='center'><input type='submit' name='ACTION' value= $Lang ::tr{'save'} />
1316 & Header
:: closebox
();
1320 if ( $qossettings { 'VALID' } eq 'yes' ) {
1321 if ( $qossettings { 'DEVICE' } eq $qossettings { 'RED_DEV' } ) {
1322 $qossettings { 'SPD' } = $qossettings { 'OUT_SPD' };
1323 } elsif ( $qossettings { 'DEVICE' } eq $qossettings { 'IMQ_DEV' } ) {
1324 $qossettings { 'SPD' } = $qossettings { 'INC_SPD' };
1326 unless ( ( $qossettings { 'MINBWDTH' } >= 1 ) && ( $qossettings { 'MINBWDTH' } <= $qossettings { 'SPD' } ) ) {
1327 $qossettings { 'VALID' } = 'no' ;
1328 $message = "Mindestbandbreite ist ungueltig." ;
1330 $qossettings { 'SPD' } = '' ;
1335 if ( $qossettings { 'VALID' } eq 'yes' ) {
1336 if ( $qossettings { 'DEVICE' } eq $qossettings { 'RED_DEV' } ) {
1337 $qossettings { 'SPD' } = $qossettings { 'OUT_SPD' };
1338 } elsif ( $qossettings { 'DEVICE' } eq $qossettings { 'IMQ_DEV' } ) {
1339 $qossettings { 'SPD' } = $qossettings { 'INC_SPD' };
1341 unless ( ( $qossettings { 'MAXBDWTH' } >= 0 ) && ( $qossettings { 'MAXBDWTH' } >= $qossettings { 'MINBDWTH' }) &&( $qossettings { 'MAXBDWTH' } <= $qossettings { 'SPD' } ) ) {
1342 $qossettings { 'VALID' } = 'no' ;
1343 $message = "Mamimalbandbreite ist ungueltig." ;
1345 $qossettings { 'SPD' } = '' ;
1350 if ( $qossettings { 'VALID' } eq 'yes' ) {
1351 if ( $qossettings { 'DEVICE' } eq $qossettings { 'RED_DEV' } ) {
1352 if ( $qossettings { 'CLASS' } lt 100 || $qossettings { 'CLASS' } ge 121 ) {
1353 $qossettings { 'VALID' } = 'no' ;
1354 $message = "Die Klassennummer passt nicht zum angegebenen Interface." ;
1356 } elsif ( $qossettings { 'DEVICE' } eq $qossettings { 'IMQ_DEV' } ) {
1357 if ( $qossettings { 'CLASS' } lt 200 || $qossettings { 'CLASS' } ge 221 ) {
1358 $qossettings { 'VALID' } = 'no' ;
1359 $message = "Die Klassennummer passt nicht zum angegebenen Interface." ;
1362 open ( FILE
, "< $classfile " ) or die "Unable to read $classfile " ;
1365 foreach $classentry ( sort @tmp )
1367 @tmpline = split ( /\;/ , $classentry );
1368 if ( $tmpline [ 1 ] eq $qossettings { 'CLASS' } )
1370 $qossettings { 'VALID' } = 'no' ;
1371 $message = "Die aktuelle Klasse wird bereits verwendet." ;
1379 if ( $qossettings { 'VALID' } eq 'yes' ) {
1380 open ( FILE
, "< $subclassfile " ) or die "Unable to read $subclassfile " ;
1383 foreach $subclassentry ( sort @tmp )
1385 @tmpline = split ( /\;/ , $subclassentry );
1386 if ( $tmpline [ 2 ] eq $qossettings { 'SCLASS' } )
1388 $qossettings { 'VALID' } = 'no' ;
1389 $message = "Die aktuelle Klasse wird bereits verwendet." ;
1397 $qossettings { 'DEV' } = shift ;
1398 $qossettings { 'CLASS' } = shift ;
1400 if ( $qossettings { 'DEV' } eq $qossettings { 'RED_DEV' } ) {
1401 $qossettings { 'CLASSPRFX' } = '1' ;
1403 $qossettings { 'CLASSPRFX' } = '2' ;
1406 RRDs
:: graph
( "/home/httpd/html/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-packets.png" ,
1407 "--start" , "-3240" , "-aPNG" , "-i" , "-z" ,
1408 "--alt-y-grid" , "-w 800" , "-h 150" , "-r" ,
1409 "--color" , "SHADEA#EAE9EE" ,
1410 "--color" , "SHADEB#EAE9EE" ,
1411 "--color" , "BACK#FFFFFF" ,
1412 "-t $qossettings {'CLASS'} ( $qossettings {'DEV'})" ,
1413 "DEF:pkts=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:pkts:AVERAGE" ,
1414 "DEF:dropped=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:dropped:AVERAGE" ,
1415 "DEF:overlimits=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:overlimits:AVERAGE" ,
1416 "AREA:pkts#00FFFF:packets" ,
1417 "GPRINT:pkts:LAST:total packets \\ : %8 .3lf %s packets \\ j" ,
1418 "LINE3:dropped#FF0000:dropped" ,
1419 "GPRINT:dropped:LAST:dropped packets \\ : %8 .3lf %s packets \\ j" ,
1420 "LINE3:overlimits#0000FF:overlimits" ,
1421 "GPRINT:overlimits:LAST:overlimits \\ : %8 .3lf %s packets \\ j" ,
1423 $ERROR = RRDs
:: error
;
1426 RRDs
:: graph
( "/home/httpd/html/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-borrowed.png" ,
1427 "--start" , "-3240" , "-aPNG" , "-i" , "-z" ,
1428 "--alt-y-grid" , "-w 800" , "-h 150" , "-r" ,
1429 "--color" , "SHADEA#EAE9EE" ,
1430 "--color" , "SHADEB#EAE9EE" ,
1431 "--color" , "BACK#FFFFFF" ,
1432 "-t $qossettings {'CLASS'} ( $qossettings {'DEV'})" ,
1433 "DEF:lended=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:lended:AVERAGE" ,
1434 "DEF:borrowed=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:borrowed:AVERAGE" ,
1435 "DEF:giants=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:giants:AVERAGE" ,
1436 "AREA:lended#99ff99:lended" ,
1437 "GPRINT:lended:LAST:lended \\ : %8 .3lf %s packets \\ j" ,
1438 "LINE3:borrowed#f70566:borrowed" ,
1439 "GPRINT:borrowed:LAST:borrowed \\ : %8 .3lf %s packets \\ j" ,
1440 "LINE3:giants#05ad05:giants" ,
1441 "GPRINT:giants:LAST:giants \\ : %8 .3lf %s packets \\ j" ,
1443 $ERROR = RRDs
:: error
;
1446 RRDs
:: graph
( "/home/httpd/html/graphs/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}-bytes.png" ,
1447 "--start" , "-3240" , "-aPNG" , "-i" , "-z" ,
1448 "--alt-y-grid" , "-w 800" , "-h 150" , "-r" ,
1449 "--color" , "SHADEA#EAE9EE" ,
1450 "--color" , "SHADEB#EAE9EE" ,
1451 "--color" , "BACK#FFFFFF" ,
1452 "-t $qossettings {'CLASS'} ( $qossettings {'DEV'})" ,
1453 "DEF:bits=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:bits:AVERAGE" ,
1454 "DEF:bytes=/var/log/rrd/class_ $qossettings {'CLASSPRFX'}- $qossettings {'CLASS'}_ $qossettings {'DEV'}.rrd:bytes:AVERAGE" ,
1455 "CDEF:kbytes=bytes,1024,/" ,
1456 "CDEF:kbits=bits,1024,/,8,/" ,
1457 "AREA:kbytes#FFBE7D:kbytes" ,
1458 "GPRINT:kbytes:LAST:rate \\ : %8 .3lf kbytes \\ j" ,
1460 $ERROR = RRDs
:: error
;